mirror of
https://github.com/anotherhadi/nixy.git
synced 2026-07-07 00:22:33 +02:00
Compare commits
53 Commits
5f72e16819
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 11391ae56c | |||
| a8f39b1729 | |||
| a704d3a7d2 | |||
| f72d6ab55c | |||
| 2890b49b82 | |||
| b8f30fbe4e | |||
| cc7f352ced | |||
| 24081abaf0 | |||
| 4addb1bd33 | |||
| c27c0550fb | |||
| 1333132eef | |||
| 1e83efd78a | |||
| 2f89759ca7 | |||
| 79351e46a1 | |||
| 3f37a26162 | |||
| e9fbdcb870 | |||
| e5d494607f | |||
| d4e4a8f9f7 | |||
| 7f54f94974 | |||
| 148b093eb4 | |||
| dd3ad203fa | |||
| 76f2982167 | |||
| 868c215895 | |||
| ceecbb858d | |||
| 9e45e35b7e | |||
| 6c2a7563d3 | |||
| 783e8fb9ff | |||
| 2878142360 | |||
| 93c36aa3ef | |||
| a195e1d2e9 | |||
| 3c13b64fec | |||
| 1e4b0f610c | |||
| c06762d636 | |||
| 1ba64e3731 | |||
| afc1928f5a | |||
| 87c258312c | |||
| 03f6cd7fe8 | |||
| 57db0eaaf6 | |||
| e14c569193 | |||
| a5e4dcddac | |||
| fd7c23055f | |||
| 4322ca33db | |||
| 9ebdaa1505 | |||
| 6a9752b74e | |||
| 48bb118da4 | |||
| ab92a39a28 | |||
| ec6abc4aba | |||
| fe781a0eed | |||
| 19609ad781 | |||
| 922e916a7a | |||
| 7c8a552730 | |||
| a15bc11625 | |||
| d233ae904f |
Generated
+326
-369
File diff suppressed because it is too large
Load Diff
@@ -13,8 +13,9 @@
|
|||||||
stylix.url = "github:danth/stylix";
|
stylix.url = "github:danth/stylix";
|
||||||
sops-nix.url = "github:Mic92/sops-nix";
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
nvf.url = "github:notashelf/nvf";
|
nvf.url = "github:notashelf/nvf";
|
||||||
bun2nix.url = "github:nix-community/bun2nix";
|
notashelf-tuigreet.url = "github:NotAShelf/tuigreet";
|
||||||
usbguard-tui.url = "github:anotherhadi/usbguard-tui";
|
helium-browser.url = "github:oxcl/nix-flake-helium-browser";
|
||||||
|
nur-anotherhadi.url = "github:anotherhadi/nur-packages";
|
||||||
|
|
||||||
nix-index-database = {
|
nix-index-database = {
|
||||||
url = "github:nix-community/nix-index-database";
|
url = "github:nix-community/nix-index-database";
|
||||||
@@ -32,19 +33,13 @@
|
|||||||
url = "github:caelestia-dots/cli";
|
url = "github:caelestia-dots/cli";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
spicetify-nix = {
|
|
||||||
url = "github:Gerg-L/spicetify-nix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
# Server
|
# Server
|
||||||
# FIXME: Deleted repo for now
|
|
||||||
# eleakxir.url = "github:anotherhadi/eleakxir";
|
|
||||||
nixarr.url = "github:rasmus-kirk/nixarr";
|
nixarr.url = "github:rasmus-kirk/nixarr";
|
||||||
default-creds.url = "github:anotherhadi/default-creds";
|
default-creds.url = "github:anotherhadi/default-creds";
|
||||||
blog.url = "github:anotherhadi/blog";
|
blog.url = "github:anotherhadi/blog";
|
||||||
awesome-wallpapers.url = "github:anotherhadi/awesome-wallpapers";
|
awesome-wallpapers.url = "github:anotherhadi/awesome-wallpapers";
|
||||||
iknowyou.url = "github:anotherhadi/iknowyou";
|
iknowyou.url = "github:anotherhadi/iknowyou";
|
||||||
spilltea.url = "github:anotherhadi/spilltea";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = inputs @ {
|
outputs = inputs @ {
|
||||||
@@ -62,6 +57,7 @@
|
|||||||
pkgs
|
pkgs
|
||||||
;
|
;
|
||||||
pkgs-stable = nixpkgs-stable.legacyPackages.${system};
|
pkgs-stable = nixpkgs-stable.legacyPackages.${system};
|
||||||
|
pkgs-nur-hadi = inputs.nur-anotherhadi.packages.${system};
|
||||||
};
|
};
|
||||||
merge = nixpkgs.lib.foldl nixpkgs.lib.recursiveUpdate {};
|
merge = nixpkgs.lib.foldl nixpkgs.lib.recursiveUpdate {};
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
{
|
|
||||||
programs.brave = {
|
|
||||||
enable = true;
|
|
||||||
commandLineArgs = [
|
|
||||||
# Wayland Native
|
|
||||||
"--enable-features=UseOzonePlatform"
|
|
||||||
"--ozone-platform=wayland"
|
|
||||||
|
|
||||||
# Hardware Acceleration (NVIDIA optimized)
|
|
||||||
"--enable-accelerated-video-decode"
|
|
||||||
"--enable-gpu-rasterization"
|
|
||||||
"--enable-zero-copy"
|
|
||||||
"--ignore-gpu-blocklist"
|
|
||||||
|
|
||||||
# Performance
|
|
||||||
"--enable-features=VaapiVideoDecoder"
|
|
||||||
"--enable-features=VaapiVideoEncoder"
|
|
||||||
"--enable-features=CanvasOopRasterization"
|
|
||||||
"--disable-features=UseChromeOSDirectVideoDecoder"
|
|
||||||
|
|
||||||
# Privacy & Security
|
|
||||||
"--disable-features=MediaRouter" # Disable Chromecast
|
|
||||||
"--disable-features=OptimizationHints" # No Google suggestions
|
|
||||||
"--disable-features=AutofillSavePaymentMethods"
|
|
||||||
"--disable-background-networking" # No telemetry
|
|
||||||
"--disable-sync" # Manual sync control
|
|
||||||
|
|
||||||
# Wayland-specific fixes
|
|
||||||
"--disable-features=WaylandWpColorManagerV1" # Color management fix
|
|
||||||
|
|
||||||
# UI/UX
|
|
||||||
"--force-dark-mode" # Match Stylix theme
|
|
||||||
"--enable-features=WebUIDarkMode"
|
|
||||||
"--no-default-browser-check"
|
|
||||||
];
|
|
||||||
extensions = let
|
|
||||||
ids = [
|
|
||||||
];
|
|
||||||
in
|
|
||||||
map (id: {inherit id;}) ids;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.configFile."BraveSoftware/Brave-Browser/Policies/managed/policy.json".text = builtins.toJSON {
|
|
||||||
BraveShieldsAdControl = 2;
|
|
||||||
BraveShieldsTrackersBlocked = 1;
|
|
||||||
BraveShieldsHttpsEverywhere = 1;
|
|
||||||
BraveRewardsDisabled = 1;
|
|
||||||
BraveWalletDisabled = 1;
|
|
||||||
BraveVPNDisabled = 1;
|
|
||||||
BraveAIChatEnabled = 0;
|
|
||||||
PasswordManagerEnabled = 0;
|
|
||||||
BravePlaylistEnabled = 0;
|
|
||||||
BraveWebDiscoveryEnabled = 0;
|
|
||||||
BraveStatsPingEnabled = 0;
|
|
||||||
DnsOverHttpsMode = "automatic";
|
|
||||||
BraveDarkMode = 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.desktopEntries = {
|
|
||||||
brave-incognito = {
|
|
||||||
name = "Brave (Private window)";
|
|
||||||
genericName = "Navigateur Web";
|
|
||||||
exec = "brave --incognito";
|
|
||||||
icon = "brave-browser";
|
|
||||||
terminal = false;
|
|
||||||
categories = [
|
|
||||||
"Network"
|
|
||||||
"WebBrowser"
|
|
||||||
];
|
|
||||||
mimeType = [
|
|
||||||
"text/html"
|
|
||||||
"text/xml"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
brave-tor = {
|
|
||||||
name = "Brave (Private window w/Tor)";
|
|
||||||
genericName = "Navigateur Web";
|
|
||||||
exec = "brave --tor";
|
|
||||||
icon = "brave-browser";
|
|
||||||
terminal = false;
|
|
||||||
categories = [
|
|
||||||
"Network"
|
|
||||||
"WebBrowser"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,19 @@
|
|||||||
{pkgs, ...}: let
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
cursorShaders = pkgs.fetchFromGitHub {
|
cursorShaders = pkgs.fetchFromGitHub {
|
||||||
owner = "sahaj-b";
|
owner = "sahaj-b";
|
||||||
repo = "ghostty-cursor-shaders";
|
repo = "ghostty-cursor-shaders";
|
||||||
rev = "06d4e90fb5410e9c4d0b3131584060adddf89406";
|
rev = "06d4e90fb5410e9c4d0b3131584060adddf89406";
|
||||||
hash = "sha256-G/UIr1bKnxn1AcHl/4FL/jou6b7M2VeREslYVELxdmw=";
|
hash = "sha256-G/UIr1bKnxn1AcHl/4FL/jou6b7M2VeREslYVELxdmw=";
|
||||||
};
|
};
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
in {
|
in {
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
TERMINAL = "ghostty";
|
TERMINAL = "ghostty";
|
||||||
TERM = "ghostty";
|
TERM = "ghostty";
|
||||||
XMODIFIERS = "@im=none";
|
|
||||||
GTK_IM_MODULE = "simple";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.ghostty = {
|
programs.ghostty = {
|
||||||
@@ -40,4 +43,24 @@ in {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.file.".config/ilovetui/config.yaml".text = ''
|
||||||
|
colors:
|
||||||
|
base00: "#${c.base00}" # Background
|
||||||
|
base01: "#${c.base01}" # Lighter Background / Status Bars
|
||||||
|
base02: "#${c.base02}" # Selection Background
|
||||||
|
base03: "#${c.base03}" # Comments / Invisibles
|
||||||
|
base04: "#${c.base04}" # Dark Foreground / Status Bars
|
||||||
|
base05: "#${c.base05}" # Default Foreground
|
||||||
|
base06: "#${c.base06}" # Light Foreground
|
||||||
|
base07: "#${c.base07}" # Light Background
|
||||||
|
base08: "#${c.base08}" # Variables / Errors / Diff Deleted
|
||||||
|
base09: "#${c.base09}" # Integers / Constants / Booleans
|
||||||
|
base0a: "#${c.base0A}" # Classes / Warnings / Search Background
|
||||||
|
base0b: "#${c.base0B}" # Strings / Success / Diff Inserted
|
||||||
|
base0c: "#${c.base0C}" # Support / Regex / Escape Characters
|
||||||
|
base0d: "#${c.base0D}" # Functions / Methods / Headings / Accent
|
||||||
|
base0e: "#${c.base0E}" # Keywords / Storage / Diff Changed
|
||||||
|
base0f: "#${c.base0F}" # Embedded / Misc
|
||||||
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-stable,
|
pkgs-stable,
|
||||||
|
pkgs-nur-hadi,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs-stable; [
|
home.packages = with pkgs-stable; [
|
||||||
vlc # Video player
|
vlc # Video player
|
||||||
blanket # White-noise app
|
|
||||||
obsidian # Note taking app
|
obsidian # Note taking app
|
||||||
textpieces # Manipulate texts
|
textpieces # Manipulate texts
|
||||||
resources # Ressource monitor
|
resources # Ressource monitor
|
||||||
@@ -13,9 +13,33 @@
|
|||||||
gnome-text-editor # Basic graphic text editor
|
gnome-text-editor # Basic graphic text editor
|
||||||
ticktick # Todo app
|
ticktick # Todo app
|
||||||
pinta # Image editor
|
pinta # Image editor
|
||||||
|
switcheroo # Convert images between different formats
|
||||||
onlyoffice-desktopeditors # Office suite
|
onlyoffice-desktopeditors # Office suite
|
||||||
|
blanket # Listen to different sounds
|
||||||
signal-desktop # Messaging app
|
signal-desktop # Messaging app
|
||||||
element-desktop # Messaging app
|
librewolf # Backup browser
|
||||||
|
|
||||||
|
# I love TUIs
|
||||||
|
caligula # User-friendly, lightweight TUI for disk imaging (ISO, USB BOOT)
|
||||||
|
browsh # A modern text-based browser that renders anything that a modern browser can. It runs in a terminal and can be used remotely over SSH
|
||||||
|
dysk # A terminal-based disk usage analyzer
|
||||||
|
wikiman # Offline search engine for manual pages (arch wiki, tldr)
|
||||||
|
tealdeer # Fast tldr client
|
||||||
|
sttr # Minimalist "cyberchef" like. Cross-platform, cli app to perform various operations on string
|
||||||
|
wiremix # Simple TUI mixer for PipeWire
|
||||||
|
slides # A terminal-based presentation tool that allows you to create and deliver presentations directly from the command line
|
||||||
|
pom # Pomodoro timer in your terminal
|
||||||
|
pkgs.wifitui # TUI for managing wifi
|
||||||
|
pkgs-nur-hadi.usbguard-tui # TUI for managing USBGuard rules
|
||||||
|
pkgs-nur-hadi.sheets # Terminal based spreadsheet tool
|
||||||
|
|
||||||
|
# I love CLIs
|
||||||
|
httpie # Command-line HTTP client, a user-friendly cURL replacement
|
||||||
|
gh # GitHub
|
||||||
|
gh-dash # A terminal dashboard for GitHub
|
||||||
|
figlet # Transform text into ASCII art
|
||||||
|
pastel # Command-line tool to generate, analyze, convert and manipulate colors
|
||||||
|
imagemagick # Image manipulation tool
|
||||||
|
chafa # Image to ANSI/Unicode converter and more.
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
pkgs-stable,
|
||||||
|
pkgs-nur-hadi,
|
||||||
|
}:
|
||||||
|
(with pkgs-stable; [
|
||||||
|
# Web
|
||||||
|
dirb
|
||||||
|
ffuf
|
||||||
|
katana
|
||||||
|
whatweb
|
||||||
|
|
||||||
|
# Hashes
|
||||||
|
hashcat
|
||||||
|
haiti
|
||||||
|
hydra
|
||||||
|
john
|
||||||
|
|
||||||
|
# Databases
|
||||||
|
mariadb
|
||||||
|
redis
|
||||||
|
sqlmap
|
||||||
|
nosqli
|
||||||
|
|
||||||
|
# Network
|
||||||
|
inetutils
|
||||||
|
termshark # wireshark in TUI
|
||||||
|
dnsrecon
|
||||||
|
whois
|
||||||
|
dig
|
||||||
|
nmap
|
||||||
|
samba
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
metasploit
|
||||||
|
nuclei
|
||||||
|
openvpn
|
||||||
|
|
||||||
|
# Secrets
|
||||||
|
trufflehog
|
||||||
|
|
||||||
|
# Forensics
|
||||||
|
binwalk
|
||||||
|
])
|
||||||
|
++ (with pkgs-nur-hadi; [
|
||||||
|
spilltea
|
||||||
|
jwt-tui
|
||||||
|
])
|
||||||
@@ -1,44 +1,12 @@
|
|||||||
{
|
{
|
||||||
inputs,
|
|
||||||
pkgs-stable,
|
|
||||||
pkgs,
|
pkgs,
|
||||||
|
pkgs-stable,
|
||||||
|
pkgs-nur-hadi,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs-stable; [
|
home.packages = import ./cybersecurity-packages.nix {
|
||||||
httpie
|
inherit pkgs pkgs-stable pkgs-nur-hadi;
|
||||||
trufflehog
|
};
|
||||||
sttr
|
|
||||||
wireshark
|
|
||||||
nmap
|
|
||||||
john
|
|
||||||
hashcat
|
|
||||||
metasploit
|
|
||||||
haiti
|
|
||||||
hydra
|
|
||||||
dnsrecon
|
|
||||||
whois
|
|
||||||
dig
|
|
||||||
nosqli
|
|
||||||
jwt-cli
|
|
||||||
nuclei
|
|
||||||
|
|
||||||
# Web
|
|
||||||
inputs.spilltea.packages.${pkgs.system}.default
|
|
||||||
caido
|
|
||||||
nuclei
|
|
||||||
gobuster
|
|
||||||
dirb
|
|
||||||
ffuf
|
|
||||||
sqlmap
|
|
||||||
katana
|
|
||||||
|
|
||||||
# Utils
|
|
||||||
inetutils
|
|
||||||
samba
|
|
||||||
openvpn
|
|
||||||
mariadb
|
|
||||||
redis
|
|
||||||
];
|
|
||||||
|
|
||||||
systemd.user.tmpfiles.rules = [
|
systemd.user.tmpfiles.rules = [
|
||||||
"d %h/Cyber/tmp 0755 - - -"
|
"d %h/Cyber/tmp 0755 - - -"
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
pkgs-stable,
|
||||||
|
}:
|
||||||
|
(with pkgs; [
|
||||||
|
go
|
||||||
|
claude-code
|
||||||
|
])
|
||||||
|
++ (with pkgs-stable; [
|
||||||
|
nodejs
|
||||||
|
air
|
||||||
|
duckdb
|
||||||
|
python3
|
||||||
|
jq
|
||||||
|
nix-prefetch-github
|
||||||
|
rsync
|
||||||
|
])
|
||||||
@@ -1,25 +1,7 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-stable,
|
pkgs-stable,
|
||||||
inputs,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages =
|
home.packages = import ./dev-packages.nix {inherit pkgs pkgs-stable;};
|
||||||
(with pkgs; [
|
|
||||||
# Unstable: latest toolchain versions preferred for dev
|
|
||||||
go
|
|
||||||
bun
|
|
||||||
nodejs
|
|
||||||
claude-code
|
|
||||||
inputs.bun2nix.packages.${stdenv.hostPlatform.system}.default
|
|
||||||
])
|
|
||||||
++ (with pkgs-stable; [
|
|
||||||
air
|
|
||||||
duckdb
|
|
||||||
docker
|
|
||||||
python3
|
|
||||||
jq
|
|
||||||
just
|
|
||||||
nix-prefetch-github
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,68 +2,21 @@
|
|||||||
inputs,
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-stable,
|
pkgs-stable,
|
||||||
|
pkgs-nur-hadi,
|
||||||
system,
|
system,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
devPackages = import ./dev-packages.nix {inherit pkgs pkgs-stable;};
|
||||||
|
cyberPackages = import ./cybersecurity-packages.nix {inherit pkgs pkgs-stable pkgs-nur-hadi;};
|
||||||
|
in {
|
||||||
packages.${system} = {
|
packages.${system} = {
|
||||||
dev = pkgs.buildEnv {
|
dev = pkgs.buildEnv {
|
||||||
name = "dev-tools";
|
name = "dev-tools";
|
||||||
paths =
|
paths = devPackages;
|
||||||
(with pkgs; [
|
|
||||||
go
|
|
||||||
bun
|
|
||||||
nodejs
|
|
||||||
air
|
|
||||||
duckdb
|
|
||||||
claude-code
|
|
||||||
inputs.bun2nix.packages.${system}.default
|
|
||||||
])
|
|
||||||
++ (with pkgs-stable; [
|
|
||||||
docker
|
|
||||||
python3
|
|
||||||
jq
|
|
||||||
just
|
|
||||||
]);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
cybersecurity = pkgs.buildEnv {
|
cybersecurity = pkgs.buildEnv {
|
||||||
name = "cybersecurity-tools";
|
name = "cybersecurity-tools";
|
||||||
paths = with pkgs-stable; [
|
paths = cyberPackages;
|
||||||
wireshark
|
|
||||||
nmap
|
|
||||||
john
|
|
||||||
hashcat
|
|
||||||
metasploit
|
|
||||||
haiti
|
|
||||||
hydra
|
|
||||||
dnsrecon
|
|
||||||
whois
|
|
||||||
dig
|
|
||||||
nosqli
|
|
||||||
jwt-cli
|
|
||||||
nuclei
|
|
||||||
caido
|
|
||||||
gobuster
|
|
||||||
dirb
|
|
||||||
ffuf
|
|
||||||
sqlmap
|
|
||||||
inetutils
|
|
||||||
samba
|
|
||||||
openvpn
|
|
||||||
mariadb
|
|
||||||
redis
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
homeManagerModules = {
|
|
||||||
dev = {
|
|
||||||
_module.args.pkgs-stable = pkgs-stable;
|
|
||||||
imports = [./dev.nix];
|
|
||||||
};
|
|
||||||
cybersecurity = {
|
|
||||||
_module.args.pkgs-stable = pkgs-stable;
|
|
||||||
imports = [./cybersecurity.nix];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
{
|
{
|
||||||
pkgs-stable,
|
pkgs-stable,
|
||||||
|
pkgs-nur-hadi,
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs-stable; [
|
home.packages = with pkgs-stable; [
|
||||||
|
tty-solitaire
|
||||||
|
bastet
|
||||||
peaclock
|
peaclock
|
||||||
cbonsai
|
cbonsai
|
||||||
pipes
|
pipes
|
||||||
cmatrix
|
cmatrix
|
||||||
fastfetch
|
fastfetch
|
||||||
inputs.usbguard-tui.packages.${system}.default
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,459 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
bookmarkList =
|
||||||
|
(import ./general.nix)
|
||||||
|
++ (import ./tools.nix)
|
||||||
|
++ (import ./entertainment.nix)
|
||||||
|
++ (import ./infosec.nix)
|
||||||
|
++ (import ./other.nix)
|
||||||
|
++ (import ./jack.nix);
|
||||||
|
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
|
|
||||||
|
stripProtocol = url: lib.removePrefix "https://" (lib.removePrefix "http://" url);
|
||||||
|
stripDomain = url: builtins.head (lib.splitString "/" (stripProtocol url));
|
||||||
|
|
||||||
|
mkCard = item: let
|
||||||
|
domain = stripDomain item.url;
|
||||||
|
initial = builtins.substring 0 1 item.name;
|
||||||
|
in ''
|
||||||
|
<a href="${item.url}" class="card">
|
||||||
|
<div class="favicon-wrapper">
|
||||||
|
<img class="favicon" src="https://icons.duckduckgo.com/ip3/${domain}.ico" alt="" aria-hidden="true" loading="lazy" onerror="this.style.display='none';this.nextElementSibling.style.display='flex'">
|
||||||
|
<span class="favicon-fallback" style="display:none">${initial}</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-info">
|
||||||
|
<span class="card-name">${item.name}</span>
|
||||||
|
<span class="card-url">${stripProtocol item.url}</span>
|
||||||
|
</div>
|
||||||
|
</a>'';
|
||||||
|
|
||||||
|
mkFolderContent = items: let
|
||||||
|
step = acc: item:
|
||||||
|
if item ? url
|
||||||
|
then acc // {pending = acc.pending ++ [item];}
|
||||||
|
else {
|
||||||
|
chunks =
|
||||||
|
acc.chunks
|
||||||
|
++ lib.optional (acc.pending != []) {
|
||||||
|
isCards = true;
|
||||||
|
items = acc.pending;
|
||||||
|
}
|
||||||
|
++ [
|
||||||
|
{
|
||||||
|
isCards = false;
|
||||||
|
folder = item;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
pending = [];
|
||||||
|
};
|
||||||
|
result =
|
||||||
|
lib.foldl' step {
|
||||||
|
chunks = [];
|
||||||
|
pending = [];
|
||||||
|
}
|
||||||
|
items;
|
||||||
|
chunks =
|
||||||
|
result.chunks
|
||||||
|
++ lib.optional (result.pending != []) {
|
||||||
|
isCards = true;
|
||||||
|
items = result.pending;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.concatMapStrings (
|
||||||
|
chunk:
|
||||||
|
if chunk.isCards
|
||||||
|
then ''
|
||||||
|
<div class="cards">
|
||||||
|
${lib.concatMapStrings mkCard chunk.items}
|
||||||
|
</div>''
|
||||||
|
else mkFolder chunk.folder
|
||||||
|
)
|
||||||
|
chunks;
|
||||||
|
|
||||||
|
mkFolder = folder: let
|
||||||
|
iconHtml =
|
||||||
|
if folder ? icon
|
||||||
|
then ''<span class="material-symbols-outlined folder-icon" aria-hidden="true">${folder.icon}</span>''
|
||||||
|
else "";
|
||||||
|
in ''
|
||||||
|
<details class="folder-section" open>
|
||||||
|
<summary class="folder-title">
|
||||||
|
${iconHtml}<span class="folder-name">${folder.name}</span>
|
||||||
|
<svg class="chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
||||||
|
</summary>
|
||||||
|
<div class="folder-content">
|
||||||
|
${mkFolderContent folder.bookmarks}
|
||||||
|
</div>
|
||||||
|
</details>'';
|
||||||
|
|
||||||
|
grouped = let
|
||||||
|
step = acc: item:
|
||||||
|
if item ? url
|
||||||
|
then acc // {pending = acc.pending ++ [item];}
|
||||||
|
else {
|
||||||
|
groups =
|
||||||
|
acc.groups
|
||||||
|
++ lib.optional (acc.pending != []) {
|
||||||
|
isRoot = true;
|
||||||
|
items = acc.pending;
|
||||||
|
}
|
||||||
|
++ [
|
||||||
|
{
|
||||||
|
isRoot = false;
|
||||||
|
inherit item;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
pending = [];
|
||||||
|
};
|
||||||
|
result =
|
||||||
|
lib.foldl' step {
|
||||||
|
groups = [];
|
||||||
|
pending = [];
|
||||||
|
}
|
||||||
|
bookmarkList;
|
||||||
|
in
|
||||||
|
result.groups
|
||||||
|
++ lib.optional (result.pending != []) {
|
||||||
|
isRoot = true;
|
||||||
|
items = result.pending;
|
||||||
|
};
|
||||||
|
|
||||||
|
mkSection = group:
|
||||||
|
if group.isRoot
|
||||||
|
then ''
|
||||||
|
<div class="root-section">
|
||||||
|
<div class="cards">
|
||||||
|
${lib.concatMapStrings mkCard group.items}
|
||||||
|
</div>
|
||||||
|
</div>''
|
||||||
|
else mkFolder group.item;
|
||||||
|
in {
|
||||||
|
home.file.".local/share/helium-startpage/index.html".text = ''
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Bookmarks</title>
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20,300,0,0">
|
||||||
|
<style>
|
||||||
|
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: #${c.base00};
|
||||||
|
color: #${c.base05};
|
||||||
|
font-family: 'Source Sans Pro', sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 100vh;
|
||||||
|
padding: 2.5rem 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto 2rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-title {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #${c.base0D};
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-bar {
|
||||||
|
flex: 1;
|
||||||
|
background-color: #${c.base01};
|
||||||
|
border: 1px solid #${c.base02};
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #${c.base05};
|
||||||
|
font-family: 'Source Sans Pro', sans-serif;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
padding: 0.5rem 0.9rem;
|
||||||
|
outline: none;
|
||||||
|
transition: border-color 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-bar::placeholder { color: #${c.base03}; }
|
||||||
|
.search-bar:focus { border-color: #${c.base0D}; }
|
||||||
|
|
||||||
|
.collapse-btn {
|
||||||
|
flex-shrink: 0;
|
||||||
|
background: none;
|
||||||
|
border: 1px solid #${c.base02};
|
||||||
|
border-radius: 8px;
|
||||||
|
color: #${c.base03};
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 0.47rem;
|
||||||
|
transition: color 0.15s ease, border-color 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-btn:hover {
|
||||||
|
color: #${c.base0D};
|
||||||
|
border-color: #${c.base0D};
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-btn svg { width: 16px; height: 16px; }
|
||||||
|
|
||||||
|
.bookmarks-container {
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.root-section { margin-bottom: 1rem; }
|
||||||
|
|
||||||
|
details.folder-section { border-radius: 8px; }
|
||||||
|
|
||||||
|
details.folder-section > summary {
|
||||||
|
list-style: none;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
padding: 0.45rem 0.5rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
user-select: none;
|
||||||
|
transition: background-color 0.12s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
details.folder-section > summary::-webkit-details-marker { display: none; }
|
||||||
|
|
||||||
|
details.folder-section > summary:hover {
|
||||||
|
background-color: #${c.base01};
|
||||||
|
color: #${c.base0D};
|
||||||
|
}
|
||||||
|
|
||||||
|
details.folder-section > summary:hover .folder-name { color: #${c.base0D}; }
|
||||||
|
details.folder-section > summary:hover .folder-icon { color: #${c.base0D}; }
|
||||||
|
|
||||||
|
.folder-icon {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1;
|
||||||
|
flex-shrink: 0;
|
||||||
|
color: #${c.base04};
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-name {
|
||||||
|
font-size: 0.72rem;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: #${c.base03};
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chevron {
|
||||||
|
width: 13px;
|
||||||
|
height: 13px;
|
||||||
|
color: #${c.base03};
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] > summary > .chevron { transform: rotate(180deg); }
|
||||||
|
|
||||||
|
.folder-content {
|
||||||
|
padding: 0.4rem 0 0.5rem 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-content > details.folder-section > summary { padding-left: 1.2rem; }
|
||||||
|
.folder-content > details.folder-section > .folder-content { padding-left: 1rem; }
|
||||||
|
|
||||||
|
.cards {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
||||||
|
gap: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.7rem;
|
||||||
|
padding: 0.6rem 0.8rem;
|
||||||
|
background-color: #${c.base01};
|
||||||
|
border: 1px solid #${c.base02};
|
||||||
|
border-radius: 10px;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: background-color 0.12s ease, border-color 0.12s ease;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover {
|
||||||
|
background-color: #${c.base02};
|
||||||
|
border-color: #${c.base0D};
|
||||||
|
}
|
||||||
|
|
||||||
|
.favicon-wrapper { position: relative; width: 18px; height: 18px; flex-shrink: 0; }
|
||||||
|
|
||||||
|
.favicon {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.favicon-fallback {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: #${c.base02};
|
||||||
|
border-radius: 4px;
|
||||||
|
color: #${c.base04};
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.05rem;
|
||||||
|
overflow: hidden;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-name {
|
||||||
|
color: #${c.base05};
|
||||||
|
font-size: 0.86rem;
|
||||||
|
font-weight: 500;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
transition: color 0.12s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card:hover .card-name { color: #${c.base0D}; }
|
||||||
|
|
||||||
|
.card-url {
|
||||||
|
color: #${c.base03};
|
||||||
|
font-family: 'Maple Mono NF', monospace;
|
||||||
|
font-size: 0.7rem;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-results {
|
||||||
|
color: #${c.base03};
|
||||||
|
font-size: 0.9rem;
|
||||||
|
padding: 0.5rem 0.2rem;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<h1 class="page-title">Bookmarks</h1>
|
||||||
|
<input id="search" class="search-bar" type="text" placeholder="Search…" autocomplete="off" spellcheck="false">
|
||||||
|
<button id="collapse-btn" class="collapse-btn" title="Collapse all folders" aria-label="Collapse all folders">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<polyline points="4 14 10 14 10 20"/><polyline points="20 10 14 10 14 4"/><line x1="10" y1="14" x2="3" y2="21"/><line x1="21" y1="3" x2="14" y2="10"/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="bookmarks-container">
|
||||||
|
<p id="no-results" class="no-results">No results</p>
|
||||||
|
${lib.concatMapStrings mkSection grouped}
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
window.addEventListener('DOMContentLoaded', function () {
|
||||||
|
const input = document.getElementById('search');
|
||||||
|
const noResults = document.getElementById('no-results');
|
||||||
|
const collapseBtn = document.getElementById('collapse-btn');
|
||||||
|
|
||||||
|
input.focus();
|
||||||
|
|
||||||
|
collapseBtn.addEventListener('click', function () {
|
||||||
|
document.querySelectorAll('details.folder-section').forEach(function (d) {
|
||||||
|
d.open = false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
input.addEventListener('input', function () {
|
||||||
|
const query = this.value.toLowerCase().trim();
|
||||||
|
let anyVisible = false;
|
||||||
|
|
||||||
|
if (query) {
|
||||||
|
document.querySelectorAll('details.folder-section').forEach(function (d) {
|
||||||
|
d.open = true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('.folder-section, .root-section').forEach(function (section) {
|
||||||
|
let sectionVisible = false;
|
||||||
|
section.querySelectorAll('.card').forEach(function (card) {
|
||||||
|
const name = card.querySelector('.card-name').textContent.toLowerCase();
|
||||||
|
const url = card.querySelector('.card-url').textContent.toLowerCase();
|
||||||
|
const match = !query || name.includes(query) || url.includes(query);
|
||||||
|
card.style.display = match ? ''' : 'none';
|
||||||
|
if (match) { sectionVisible = true; anyVisible = true; }
|
||||||
|
});
|
||||||
|
section.style.display = sectionVisible ? ''' : 'none';
|
||||||
|
});
|
||||||
|
|
||||||
|
noResults.style.display = anyVisible || !query ? 'none' : 'block';
|
||||||
|
});
|
||||||
|
|
||||||
|
input.addEventListener('keydown', function (e) {
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
const val = this.value.trim();
|
||||||
|
const isUrl = /^https?:\/\//i.test(val) || /^[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})(\/.*)?$/.test(val);
|
||||||
|
if (isUrl) {
|
||||||
|
location.href = /^https?:\/\//i.test(val) ? val : 'https://' + val;
|
||||||
|
} else {
|
||||||
|
const first = document.querySelector('.card:not([style*="none"])');
|
||||||
|
if (first) {
|
||||||
|
location.href = first.href;
|
||||||
|
} else {
|
||||||
|
const q = encodeURIComponent(val);
|
||||||
|
if (q) location.href = 'https://duckduckgo.com/?q=' + q;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (e.key === 'Escape') {
|
||||||
|
this.value = ''';
|
||||||
|
this.dispatchEvent(new Event('input'));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
'';
|
||||||
|
|
||||||
|
systemd.user.services.helium-startpage = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Helium startpage HTTP server";
|
||||||
|
After = ["network.target"];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.darkhttpd}/bin/darkhttpd %h/.local/share/helium-startpage --port 8888 --addr 127.0.0.1 --no-listing";
|
||||||
|
Restart = "on-failure";
|
||||||
|
};
|
||||||
|
Install.WantedBy = ["default.target"];
|
||||||
|
};
|
||||||
|
}
|
||||||
-8
@@ -7,14 +7,6 @@
|
|||||||
name = "Proton Drive";
|
name = "Proton Drive";
|
||||||
url = "https://drive.proton.me";
|
url = "https://drive.proton.me";
|
||||||
}
|
}
|
||||||
{
|
|
||||||
name = "Proton Lumo";
|
|
||||||
url = "https://lumo.proton.me";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Proton Calendar";
|
|
||||||
url = "https://calendar.proton.me";
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
name = "Github";
|
name = "Github";
|
||||||
url = "https://github.com";
|
url = "https://github.com";
|
||||||
+8
@@ -7,6 +7,10 @@
|
|||||||
name = "Nix 4 Cyber";
|
name = "Nix 4 Cyber";
|
||||||
url = "https://n4c.hadi.icu";
|
url = "https://n4c.hadi.icu";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "Infosec Notes - Anotherhadi";
|
||||||
|
url = "https://hadi.icu/notes";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
name = "Cyberchef";
|
name = "Cyberchef";
|
||||||
url = "https://cyberchef.hadi.icu";
|
url = "https://cyberchef.hadi.icu";
|
||||||
@@ -31,6 +35,10 @@
|
|||||||
name = "Exploit-DB";
|
name = "Exploit-DB";
|
||||||
url = "https://exploit-db.com";
|
url = "https://exploit-db.com";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "Reverse Shell Generator";
|
||||||
|
url = "https://revshells.com";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
name = "GTFOBins";
|
name = "GTFOBins";
|
||||||
url = "https://gtfobins.org/";
|
url = "https://gtfobins.org/";
|
||||||
+4
@@ -11,6 +11,10 @@
|
|||||||
name = "Hyprland Wiki";
|
name = "Hyprland Wiki";
|
||||||
url = "https://wiki.hypr.land";
|
url = "https://wiki.hypr.land";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "NVF Options";
|
||||||
|
url = "https://nvf.notashelf.dev/";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
name = "Stylix Wiki";
|
name = "Stylix Wiki";
|
||||||
url = "https://nix-community.github.io/stylix/";
|
url = "https://nix-community.github.io/stylix/";
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
|
rgb = base: map lib.strings.toInt [c."${base}-rgb-r" c."${base}-rgb-g" c."${base}-rgb-b"];
|
||||||
|
|
||||||
|
themeId = "abcadngacjlikcpkhleafekcdjmddegk";
|
||||||
|
themeKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6t46VoE3mdV1QNMgybpmQLi5PtYHejnNrSj4DkBZyiTzMzs7Yyvg64f78w3QubZA5cTXSQ7FVhVHvv30I8ym/jNzsSN6reh1t4PtKsFjFRugAty8bfKJGD404HZLOFN2z3G9UPVLBBgzDH3DWbb/kcOq60Mlo/QDCIjsieZg0G3EYMl4efoThzYPWoyv0UEoiliwrE/AChxbgipQetUZ48bFhTCsmnYzCze7clssfTobzWtJJG0qFx76LauHKymRS5OTFfgsovKqHUSFJ202Q53vFdUPP/j8PjSPr1kZeg1NYc7Ba3MoA49EwtJf5ol9oYu05EEnSQ5+1AoYVmdE8QIDAQAB";
|
||||||
|
|
||||||
|
themeManifest = builtins.toJSON {
|
||||||
|
manifest_version = 2;
|
||||||
|
name = "Stylix Theme";
|
||||||
|
version = "1.0";
|
||||||
|
key = themeKey;
|
||||||
|
theme.colors = {
|
||||||
|
frame = rgb "base00";
|
||||||
|
frame_inactive = rgb "base00";
|
||||||
|
frame_incognito = rgb "base00";
|
||||||
|
frame_incognito_inactive = rgb "base00";
|
||||||
|
toolbar = rgb "base00";
|
||||||
|
toolbar_button_icon = rgb "base05";
|
||||||
|
control_background = rgb "base00";
|
||||||
|
tab_text = rgb "base0D";
|
||||||
|
background_tab = rgb "base00";
|
||||||
|
tab_background_text = rgb "base04";
|
||||||
|
tab_background_text_inactive = rgb "base04";
|
||||||
|
ntp_background = rgb "base00";
|
||||||
|
ntp_text = rgb "base05";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
heliumFlags = [
|
||||||
|
"--ozone-platform=wayland"
|
||||||
|
"--enable-features=UseOzonePlatform,VaapiVideoDecoder,VaapiVideoEncoder,CanvasOopRasterization"
|
||||||
|
"--disable-features=UseChromeOSDirectVideoDecoder,WaylandWpColorManagerV1"
|
||||||
|
"--enable-accelerated-video-decode"
|
||||||
|
"--enable-gpu-rasterization"
|
||||||
|
"--use-gl=egl"
|
||||||
|
"--no-default-browser-check"
|
||||||
|
"--show-avatar-button=never"
|
||||||
|
];
|
||||||
|
|
||||||
|
originalPkg = (inputs.helium-browser.packages.${pkgs.stdenv.hostPlatform.system}.helium).override {
|
||||||
|
flags = heliumFlags;
|
||||||
|
};
|
||||||
|
|
||||||
|
patchScript = pkgs.writeShellScript "helium-patch-prefs" ''
|
||||||
|
PROFILE="$HOME/.config/net.imput.helium/Default"
|
||||||
|
THEME_DIR="$PROFILE/Extensions/${themeId}/1.0_0"
|
||||||
|
PREFS="$PROFILE/Preferences"
|
||||||
|
|
||||||
|
mkdir -p "$THEME_DIR"
|
||||||
|
rm -f "$THEME_DIR/Cached Theme.pak"
|
||||||
|
printf '%s' '${themeManifest}' > "$THEME_DIR/manifest.json"
|
||||||
|
|
||||||
|
if [ -f "$PREFS" ]; then
|
||||||
|
tmp=$(mktemp)
|
||||||
|
${lib.getExe pkgs.jq} \
|
||||||
|
--arg id "${themeId}" \
|
||||||
|
--slurpfile manifest "$THEME_DIR/manifest.json" \
|
||||||
|
'
|
||||||
|
.helium.browser.layout = 3 |
|
||||||
|
.helium.browser.minimal_location_bar = true |
|
||||||
|
.helium.browser.show_dynamic_new_tab_button = false |
|
||||||
|
.helium.browser.rounded_frame = false |
|
||||||
|
.bookmark_bar.show_tab_groups = false |
|
||||||
|
.extensions.settings[$id] = {
|
||||||
|
"active_permissions": {"api": [], "explicit_host": [], "manifest_permissions": [], "scriptable_host": []},
|
||||||
|
"creation_flags": 0,
|
||||||
|
"from_webstore": false,
|
||||||
|
"install_time": "13300000000000000",
|
||||||
|
"location": 1,
|
||||||
|
"manifest": $manifest[0],
|
||||||
|
"path": ($id + "/1.0_0"),
|
||||||
|
"state": 1,
|
||||||
|
"was_installed_by_default": false,
|
||||||
|
"was_installed_by_oem": false
|
||||||
|
} |
|
||||||
|
.extensions.theme = {"id": $id, "use_system": false}
|
||||||
|
' "$PREFS" > "$tmp" && mv "$tmp" "$PREFS"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
baseWrapped = pkgs.symlinkJoin {
|
||||||
|
name = "helium-wrapped";
|
||||||
|
paths = [originalPkg];
|
||||||
|
nativeBuildInputs = [pkgs.makeWrapper];
|
||||||
|
postBuild = ''
|
||||||
|
wrapProgram $out/bin/helium \
|
||||||
|
--run ${lib.escapeShellArg (toString patchScript)}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
wrappedPkg = baseWrapped // {override = _: baseWrapped;};
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
inputs.helium-browser.homeModules.default
|
||||||
|
./bookmarks
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.helium = {
|
||||||
|
enable = true;
|
||||||
|
package = lib.mkForce wrappedPkg;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariables.BROWSER = "${config.programs.helium.package}/bin/helium";
|
||||||
|
|
||||||
|
xdg.desktopEntries.helium = {
|
||||||
|
name = "Helium";
|
||||||
|
genericName = "Navigateur Web";
|
||||||
|
exec = "${config.programs.helium.package}/bin/helium %U";
|
||||||
|
icon = "${config.programs.helium.package}/share/icons/hicolor/256x256/apps/helium.png";
|
||||||
|
terminal = false;
|
||||||
|
categories = ["Network" "WebBrowser"];
|
||||||
|
mimeType = [
|
||||||
|
"text/html"
|
||||||
|
"text/xml"
|
||||||
|
"application/xhtml+xml"
|
||||||
|
"x-scheme-handler/http"
|
||||||
|
"x-scheme-handler/https"
|
||||||
|
"x-scheme-handler/ftp"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.desktopEntries.helium-private = {
|
||||||
|
name = "Helium (Private window)";
|
||||||
|
genericName = "Navigateur Web";
|
||||||
|
exec = "${config.programs.helium.package}/bin/helium --incognito %U";
|
||||||
|
icon = "${config.programs.helium.package}/share/icons/hicolor/256x256/apps/helium.png";
|
||||||
|
terminal = false;
|
||||||
|
categories = ["Network" "WebBrowser"];
|
||||||
|
mimeType = ["text/html" "text/xml" "application/xhtml+xml"];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
{...}: let
|
||||||
|
bookmarkList =
|
||||||
|
(import ./bookmarks/general.nix)
|
||||||
|
++ (import ./bookmarks/tools.nix)
|
||||||
|
++ (import ./bookmarks/entertainment.nix)
|
||||||
|
++ (import ./bookmarks/infosec.nix)
|
||||||
|
++ (import ./bookmarks/other.nix)
|
||||||
|
++ (import ./bookmarks/jack.nix);
|
||||||
|
|
||||||
|
toChromium = items:
|
||||||
|
map (item:
|
||||||
|
if item ? url
|
||||||
|
then {inherit (item) name url;}
|
||||||
|
else {
|
||||||
|
name = item.name;
|
||||||
|
children = toChromium item.bookmarks;
|
||||||
|
})
|
||||||
|
items;
|
||||||
|
in {
|
||||||
|
stylix.targets.chromium.enable = false;
|
||||||
|
|
||||||
|
programs.helium = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
policies = {
|
||||||
|
BrowserSignin = 0;
|
||||||
|
SyncDisabled = true;
|
||||||
|
SigninAllowed = false;
|
||||||
|
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
AutofillAddressEnabled = false;
|
||||||
|
AutofillCreditCardEnabled = false;
|
||||||
|
SafeBrowsingEnabled = false;
|
||||||
|
MetricsReportingEnabled = false;
|
||||||
|
SpellCheckServiceEnabled = false;
|
||||||
|
DefaultCookiesSetting = 1;
|
||||||
|
DefaultGeolocationSetting = 2;
|
||||||
|
DefaultNotificationsSetting = 2;
|
||||||
|
DefaultPopupsSetting = 2;
|
||||||
|
|
||||||
|
DefaultBrowserSettingEnabled = false;
|
||||||
|
DeveloperToolsAvailability = 1;
|
||||||
|
|
||||||
|
DnsOverHttpsMode = "secure";
|
||||||
|
DnsOverHttpsTemplates = "https://dns.quad9.net/dns-query";
|
||||||
|
|
||||||
|
DefaultSearchProviderEnabled = true;
|
||||||
|
DefaultSearchProviderName = "Startpage";
|
||||||
|
DefaultSearchProviderSearchURL = "https://www.startpage.com/do/search?q={searchTerms}";
|
||||||
|
DefaultSearchProviderSuggestURL = "https://www.startpage.com/do/suggest?q={searchTerms}";
|
||||||
|
|
||||||
|
NewTabPageLocation = "http://127.0.0.1:8888";
|
||||||
|
HomepageIsNewTabPage = false;
|
||||||
|
HomepageLocation = "http://127.0.0.1:8888";
|
||||||
|
ShowHomeButton = false;
|
||||||
|
RestoreOnStartup = 4;
|
||||||
|
|
||||||
|
BookmarkBarEnabled = false;
|
||||||
|
ManagedBookmarks = toChromium bookmarkList;
|
||||||
|
|
||||||
|
ExtensionInstallForcelist = [
|
||||||
|
"dbepggeogbaibhgnhhndojpepiihcmeb" # Vimiu
|
||||||
|
"gcknhkkoolaabfmlnjonogaaifnjlfnp" # FoxyProxy
|
||||||
|
"ghmbeldphafepmbegfdlkpapadhbakde" # Proton Pass
|
||||||
|
"mdjildafknihdffpkfmmpnpoiajfjnjd" # Consent-O-Matic
|
||||||
|
"pkehgijcmpdhfbdbbnkijodmdjhbjlgp" # Privacy Badger
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,12 +1,24 @@
|
|||||||
{
|
{
|
||||||
inputs,
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
|
in {
|
||||||
imports = [inputs.nvf.homeManagerModules.default];
|
imports = [inputs.nvf.homeManagerModules.default];
|
||||||
programs.nvf = {
|
programs.nvf = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
vim.luaConfigRC.hl-overrides = ''
|
||||||
|
local function apply_hl()
|
||||||
|
vim.api.nvim_set_hl(0, "MiniStarterHeader", { fg = "#${c.base0D}", bold = true })
|
||||||
|
vim.api.nvim_set_hl(0, "SnacksPickerBorder", { fg = "#${c.base0D}" })
|
||||||
|
vim.api.nvim_set_hl(0, "SnacksPickerTitle", { fg = "#${c.base0D}", bold = true })
|
||||||
|
end
|
||||||
|
apply_hl()
|
||||||
|
vim.api.nvim_create_autocmd("ColorScheme", { pattern = "*", callback = apply_hl })
|
||||||
|
'';
|
||||||
imports = [
|
imports = [
|
||||||
./options.nix
|
./options.nix
|
||||||
./languages.nix
|
./languages.nix
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
vim = {
|
vim = {
|
||||||
globals.mapleader = " ";
|
globals.mapleader = " ";
|
||||||
|
|
||||||
keymaps = [
|
keymaps = [
|
||||||
{
|
{
|
||||||
key = "s";
|
key = "s";
|
||||||
@@ -62,6 +63,20 @@
|
|||||||
action = ":<C-u>SttrTransform<CR>";
|
action = ":<C-u>SttrTransform<CR>";
|
||||||
desc = "String Transform";
|
desc = "String Transform";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
key = "<leader>tj";
|
||||||
|
mode = "n";
|
||||||
|
silent = true;
|
||||||
|
action = ":JwtTui<CR>";
|
||||||
|
desc = "JWT TUI";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "<leader>tj";
|
||||||
|
mode = "v";
|
||||||
|
silent = true;
|
||||||
|
action = ":<C-u>JwtTuiOpen<CR>";
|
||||||
|
desc = "JWT TUI";
|
||||||
|
}
|
||||||
|
|
||||||
# UI
|
# UI
|
||||||
{
|
{
|
||||||
@@ -130,6 +145,52 @@
|
|||||||
desc = "Todo (Trouble)";
|
desc = "Todo (Trouble)";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Shell
|
||||||
|
{
|
||||||
|
key = "<leader>!";
|
||||||
|
mode = "n";
|
||||||
|
silent = true;
|
||||||
|
lua = true;
|
||||||
|
desc = "Insert command output";
|
||||||
|
action = ''
|
||||||
|
function()
|
||||||
|
local cmd = vim.fn.input("Command: ")
|
||||||
|
if cmd == "" then return end
|
||||||
|
local lines = vim.fn.systemlist(cmd)
|
||||||
|
while #lines > 0 and lines[#lines] == "" do
|
||||||
|
table.remove(lines)
|
||||||
|
end
|
||||||
|
if #lines == 0 then return end
|
||||||
|
vim.api.nvim_put(lines, "l", true, true)
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "<leader>!";
|
||||||
|
mode = "v";
|
||||||
|
silent = true;
|
||||||
|
lua = true;
|
||||||
|
desc = "Run command with selection";
|
||||||
|
action = ''
|
||||||
|
function()
|
||||||
|
local start_line = vim.fn.line("'<")
|
||||||
|
local end_line = vim.fn.line("'>")
|
||||||
|
local lines = vim.api.nvim_buf_get_lines(0, start_line - 1, end_line, false)
|
||||||
|
local input_text = table.concat(lines, "\n")
|
||||||
|
|
||||||
|
local cmd = vim.fn.input("$ ")
|
||||||
|
if cmd == "" then return end
|
||||||
|
|
||||||
|
local result = vim.fn.system({"bash", "-c", cmd}, input_text)
|
||||||
|
local output = vim.split(result, "\n", { plain = true })
|
||||||
|
if output[#output] == "" then table.remove(output) end
|
||||||
|
if #output == 0 then return end
|
||||||
|
|
||||||
|
vim.api.nvim_buf_set_lines(0, start_line - 1, end_line, false, output)
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
|
||||||
# QOL
|
# QOL
|
||||||
{
|
{
|
||||||
key = ">";
|
key = ">";
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
autotagHtml = true;
|
autotagHtml = true;
|
||||||
context.enable = true;
|
context.enable = true;
|
||||||
highlight.enable = true;
|
highlight.enable = true;
|
||||||
|
textobjects.enable = true;
|
||||||
};
|
};
|
||||||
lsp = {
|
lsp = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{lib, ...}: {
|
||||||
vim.luaConfigRC.mini-clue = ''
|
vim.luaConfigRC.mini-clue = ''
|
||||||
local miniclue = require('mini.clue')
|
local miniclue = require('mini.clue')
|
||||||
miniclue.setup({
|
miniclue.setup({
|
||||||
@@ -27,6 +27,9 @@
|
|||||||
{ mode = 'n', keys = '<Leader>u', desc = '+ui' },
|
{ mode = 'n', keys = '<Leader>u', desc = '+ui' },
|
||||||
{ mode = 'n', keys = '<Leader>l', desc = '+lsp' },
|
{ mode = 'n', keys = '<Leader>l', desc = '+lsp' },
|
||||||
{ mode = 'n', keys = '<Leader>x', desc = '+trouble' },
|
{ mode = 'n', keys = '<Leader>x', desc = '+trouble' },
|
||||||
|
{ mode = 'n', keys = '<Leader>!', desc = 'shell' },
|
||||||
|
{ mode = 'v', keys = '<Leader>!', desc = 'shell' },
|
||||||
|
{ mode = 'n', keys = '<Leader>e', desc = 'yazi' },
|
||||||
},
|
},
|
||||||
window = { delay = 300 },
|
window = { delay = 300 },
|
||||||
})
|
})
|
||||||
@@ -34,7 +37,55 @@
|
|||||||
|
|
||||||
vim.mini = {
|
vim.mini = {
|
||||||
ai.enable = true;
|
ai.enable = true;
|
||||||
starter.enable = true;
|
starter = {
|
||||||
|
enable = true;
|
||||||
|
setupOpts = {
|
||||||
|
header = ''
|
||||||
|
⣟⣯⣟⣯⡇⠀⣿⢩⣛⡼⣏⠀⠈⠋⠀⣈⡷⣙⢎⡳⣙⢮⣙⢮⣙⢎⡳⣙⢾⣿
|
||||||
|
⢿⡾⣽⡞⣷⣤⣏⡳⡜⡼⠗⠁⢀⠀⠙⢧⠳⣍⢞⡱⣭⠲⣍⠶⣩⢞⡱⡭⣾⣿
|
||||||
|
⠈⠻⠧⢿⣧⣿⠶⣵⢻⢞⡷⢲⡟⡶⢴⡭⢿⣜⣮⡱⢎⡳⣍⢞⡱⢮⡱⣳⣿⣽
|
||||||
|
⠀⣰⣶⡏⢷⣈⣿⣸⣇⣾⣸⣿⣾⣹⣆⡹⡎⡶⢇⡿⣹⢷⣾⣈⠷⣇⢷⣿⣿⣹
|
||||||
|
⣾⣻⣭⣿⣾⣿⣿⣟⣿⣿⡿⣽⡿⣿⢿⣿⣿⣿⣾⣶⣵⣾⠲⣭⢳⣞⣾⡿⣷⣿
|
||||||
|
⣿⣿⣿⣯⣷⣿⣿⠿⢝⠚⠋⠉⠉⠉⠙⠚⠛⡾⢿⣿⣻⣿⣿⣶⣏⠶⣩⠿⣿⡈
|
||||||
|
⣿⣟⣿⣻⣿⡏⠀⠀⠀⠳⡀⠀⠀⠀⠀⠰⠊⠀⠀⠈⠙⠳⣿⣿⣿⣿⣧⣻⣿⣿
|
||||||
|
⠘⢻⣿⣿⣽⡇⠈⠧⣄⠀⠀⠀⠀⠀⠀⢀⣄⡤⠴⠚⠀⠀⠀⠙⢿⣷⡿⣿⣿⣿
|
||||||
|
⠀⠠⢈⢛⣿⠀⠚⠉⠉⠱⣼⡷⠀⠀⠀⠀⠉⠉⠑⠶⠀⠀⠀⠀⠀⠻⣿⣿⣾⢿
|
||||||
|
⠀⠡⠈⠉⠹⡀⠀⠀⡄⠀⣸⡀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣯⣿⢿
|
||||||
|
⠀⠁⢶⣶⠀⢷⠀⠀⠉⠉⠀⠈⠉⠶⠆⠈⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⣿⣿⣾⣿
|
||||||
|
⠀⠡⢸⢹⠏⡍⠓⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣺⡟⠋⠉⢹⢭⢣
|
||||||
|
⠀⠀⢸⣹⡏⠭⠭⠭⠙⣲⣦⣤⣤⣀⣀⣀⣀⣤⣤⣶⣞⠉⠙⠛⠷⢀⣀⠘⣎⠧
|
||||||
|
⢁⣈⣀⣀⢀⣀⣀⣀⣼⠟⠹⢿⣯⣟⣿⣻⡿⠿⠛⢿⣿⣦⡀⠀⠀⠀⠀⠉⠉⠘
|
||||||
|
'';
|
||||||
|
footer = "";
|
||||||
|
items = [
|
||||||
|
{
|
||||||
|
name = "files";
|
||||||
|
action = lib.mkLuaInline "function() Snacks.picker.files() end";
|
||||||
|
section = "";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "directories";
|
||||||
|
action = lib.mkLuaInline "function() Snacks.explorer() end";
|
||||||
|
section = "";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "tmp";
|
||||||
|
action = lib.mkLuaInline ''
|
||||||
|
function()
|
||||||
|
local uuid = vim.fn.system("uuidgen"):match("(%S+)")
|
||||||
|
vim.cmd("edit /tmp/" .. uuid .. ".md")
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
section = "";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "recent";
|
||||||
|
action = lib.mkLuaInline "function() Snacks.picker.recent() end";
|
||||||
|
section = "";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
comment.enable = true;
|
comment.enable = true;
|
||||||
icons.enable = true;
|
icons.enable = true;
|
||||||
indentscope.enable = true;
|
indentscope.enable = true;
|
||||||
@@ -44,5 +95,6 @@
|
|||||||
jump2d.enable = true;
|
jump2d.enable = true;
|
||||||
statusline.enable = true;
|
statusline.enable = true;
|
||||||
clue.enable = true;
|
clue.enable = true;
|
||||||
|
surround.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
desc = "Smart Find Files";
|
desc = "Smart Find Files";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "<leader>e";
|
key = "<leader>E";
|
||||||
mode = "n";
|
mode = "n";
|
||||||
silent = true;
|
silent = true;
|
||||||
action = "<cmd>lua Snacks.explorer()<cr>";
|
action = "<cmd>lua Snacks.explorer()<cr>";
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
vim.keymap.del("n", "<leader>tdt")
|
vim.keymap.del("n", "<leader>tdt")
|
||||||
'';
|
'';
|
||||||
undoFile.enable = true;
|
undoFile.enable = true;
|
||||||
|
utility.yazi-nvim = {
|
||||||
|
enable = true;
|
||||||
|
mappings.openYazi = "<leader>e";
|
||||||
|
};
|
||||||
notes.todo-comments.enable = true;
|
notes.todo-comments.enable = true;
|
||||||
assistant.copilot = {
|
assistant.copilot = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -49,6 +53,20 @@
|
|||||||
require("sttr").setup()
|
require("sttr").setup()
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
jwt-tui-nvim = {
|
||||||
|
package = pkgs.vimUtils.buildVimPlugin {
|
||||||
|
name = "jwt-tui-nvim";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "anotherhadi";
|
||||||
|
repo = "jwt-tui.nvim";
|
||||||
|
rev = "c5100cb2cdfaf333014076a1a5c4c6a778bf3983";
|
||||||
|
hash = "sha256-qnQYZuQwyWkezhuyOorM67KBtatUboubofuT9A6McJI=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
setup = ''
|
||||||
|
require("jwt-tui").setup()
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
{pkgs, ...}: {
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
proton-vpn
|
proton-vpn
|
||||||
proton-pass
|
proton-pass
|
||||||
@@ -17,7 +21,7 @@
|
|||||||
};
|
};
|
||||||
"Proton Calendar" = {
|
"Proton Calendar" = {
|
||||||
name = "Proton Calendar";
|
name = "Proton Calendar";
|
||||||
exec = "${pkgs.qutebrowser}/bin/qutebrowser \"https://calendar.proton.me\"";
|
exec = ''${config.programs.helium.package}/bin/helium "https://calendar.proton.me"'';
|
||||||
icon = "proton-calendar";
|
icon = "proton-calendar";
|
||||||
type = "Application";
|
type = "Application";
|
||||||
categories = ["Utility"];
|
categories = ["Utility"];
|
||||||
@@ -25,7 +29,7 @@
|
|||||||
};
|
};
|
||||||
"Proton Mail" = {
|
"Proton Mail" = {
|
||||||
name = "Proton Mail";
|
name = "Proton Mail";
|
||||||
exec = "${pkgs.qutebrowser}/bin/qutebrowser \"https://mail.proton.me/\"";
|
exec = ''${config.programs.helium.package}/bin/helium "https://mail.proton.me/"'';
|
||||||
icon = "proton-mail";
|
icon = "proton-mail";
|
||||||
type = "Application";
|
type = "Application";
|
||||||
categories = ["Utility"];
|
categories = ["Utility"];
|
||||||
|
|||||||
@@ -1,484 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
bookmarkList =
|
|
||||||
(import ./general.nix)
|
|
||||||
++ (import ./tools.nix)
|
|
||||||
++ (import ./social.nix)
|
|
||||||
++ (import ./infosec.nix)
|
|
||||||
++ (import ./other.nix)
|
|
||||||
++ (import ./jack.nix);
|
|
||||||
|
|
||||||
c = config.lib.stylix.colors;
|
|
||||||
|
|
||||||
stripProtocol = url: lib.removePrefix "https://" (lib.removePrefix "http://" url);
|
|
||||||
|
|
||||||
stripDomain = url: builtins.head (lib.splitString "/" (stripProtocol url));
|
|
||||||
|
|
||||||
mkCard = item: let
|
|
||||||
domain = stripDomain item.url;
|
|
||||||
initial = builtins.substring 0 1 item.name;
|
|
||||||
in ''
|
|
||||||
<a href="${item.url}" class="card">
|
|
||||||
<div class="favicon-wrapper">
|
|
||||||
<img class="favicon" src="https://icons.duckduckgo.com/ip3/${domain}.ico" alt="" aria-hidden="true" loading="lazy" onerror="this.style.display='none';this.nextElementSibling.style.display='flex'">
|
|
||||||
<span class="favicon-fallback" style="display:none">${initial}</span>
|
|
||||||
</div>
|
|
||||||
<div class="card-info">
|
|
||||||
<span class="card-name">${item.name}</span>
|
|
||||||
<span class="card-url">${stripProtocol item.url}</span>
|
|
||||||
</div>
|
|
||||||
</a>'';
|
|
||||||
|
|
||||||
mkFolderContent = items: let
|
|
||||||
step = acc: item:
|
|
||||||
if item ? url
|
|
||||||
then acc // {pending = acc.pending ++ [item];}
|
|
||||||
else {
|
|
||||||
chunks =
|
|
||||||
acc.chunks
|
|
||||||
++ lib.optional (acc.pending != []) {
|
|
||||||
isCards = true;
|
|
||||||
items = acc.pending;
|
|
||||||
}
|
|
||||||
++ [
|
|
||||||
{
|
|
||||||
isCards = false;
|
|
||||||
folder = item;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
pending = [];
|
|
||||||
};
|
|
||||||
result =
|
|
||||||
lib.foldl' step {
|
|
||||||
chunks = [];
|
|
||||||
pending = [];
|
|
||||||
}
|
|
||||||
items;
|
|
||||||
chunks =
|
|
||||||
result.chunks
|
|
||||||
++ lib.optional (result.pending != []) {
|
|
||||||
isCards = true;
|
|
||||||
items = result.pending;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
lib.concatMapStrings (
|
|
||||||
chunk:
|
|
||||||
if chunk.isCards
|
|
||||||
then ''
|
|
||||||
<div class="cards">
|
|
||||||
${lib.concatMapStrings mkCard chunk.items}
|
|
||||||
</div>''
|
|
||||||
else mkFolder chunk.folder
|
|
||||||
)
|
|
||||||
chunks;
|
|
||||||
|
|
||||||
mkFolder = folder: let
|
|
||||||
iconHtml =
|
|
||||||
if folder ? icon
|
|
||||||
then ''<span class="material-symbols-outlined folder-icon" aria-hidden="true">${folder.icon}</span>''
|
|
||||||
else "";
|
|
||||||
in ''
|
|
||||||
<details class="folder-section" open>
|
|
||||||
<summary class="folder-title">
|
|
||||||
${iconHtml}<span class="folder-name">${folder.name}</span>
|
|
||||||
<svg class="chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
|
||||||
</summary>
|
|
||||||
<div class="folder-content">
|
|
||||||
${mkFolderContent folder.bookmarks}
|
|
||||||
</div>
|
|
||||||
</details>'';
|
|
||||||
|
|
||||||
grouped = let
|
|
||||||
step = acc: item:
|
|
||||||
if item ? url
|
|
||||||
then acc // {pending = acc.pending ++ [item];}
|
|
||||||
else {
|
|
||||||
groups =
|
|
||||||
acc.groups
|
|
||||||
++ lib.optional (acc.pending != []) {
|
|
||||||
isRoot = true;
|
|
||||||
items = acc.pending;
|
|
||||||
}
|
|
||||||
++ [
|
|
||||||
{
|
|
||||||
isRoot = false;
|
|
||||||
inherit item;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
pending = [];
|
|
||||||
};
|
|
||||||
result =
|
|
||||||
lib.foldl' step {
|
|
||||||
groups = [];
|
|
||||||
pending = [];
|
|
||||||
}
|
|
||||||
bookmarkList;
|
|
||||||
in
|
|
||||||
result.groups
|
|
||||||
++ lib.optional (result.pending != []) {
|
|
||||||
isRoot = true;
|
|
||||||
items = result.pending;
|
|
||||||
};
|
|
||||||
|
|
||||||
mkSection = group:
|
|
||||||
if group.isRoot
|
|
||||||
then ''
|
|
||||||
<div class="root-section">
|
|
||||||
<div class="cards">
|
|
||||||
${lib.concatMapStrings mkCard group.items}
|
|
||||||
</div>
|
|
||||||
</div>''
|
|
||||||
else mkFolder group.item;
|
|
||||||
|
|
||||||
collectBookmarks = prefix: items:
|
|
||||||
lib.concatMapStrings (
|
|
||||||
item:
|
|
||||||
if item ? url
|
|
||||||
then "${item.url} ${prefix}${item.name}\n"
|
|
||||||
else collectBookmarks "${prefix}${item.name}/" item.bookmarks
|
|
||||||
)
|
|
||||||
items;
|
|
||||||
|
|
||||||
publicBookmarks = pkgs.writeText "qutebrowser-public-bookmarks" (collectBookmarks "" bookmarkList);
|
|
||||||
in {
|
|
||||||
config = {
|
|
||||||
xdg.dataFile."qutebrowser/bookmarks.html".text = ''
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Bookmarks</title>
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20,300,0,0">
|
|
||||||
<style>
|
|
||||||
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #${c.base00};
|
|
||||||
color: #${c.base05};
|
|
||||||
font-family: 'Source Sans Pro', sans-serif;
|
|
||||||
font-size: 14px;
|
|
||||||
min-height: 100vh;
|
|
||||||
padding: 2.5rem 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
max-width: 1100px;
|
|
||||||
margin: 0 auto 2rem;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-title {
|
|
||||||
font-size: 1.3rem;
|
|
||||||
font-weight: 700;
|
|
||||||
color: #${c.base0D};
|
|
||||||
letter-spacing: -0.01em;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-bar {
|
|
||||||
flex: 1;
|
|
||||||
background-color: #${c.base01};
|
|
||||||
border: 1px solid #${c.base02};
|
|
||||||
border-radius: 8px;
|
|
||||||
color: #${c.base05};
|
|
||||||
font-family: 'Source Sans Pro', sans-serif;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
padding: 0.5rem 0.9rem;
|
|
||||||
outline: none;
|
|
||||||
transition: border-color 0.15s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-bar::placeholder { color: #${c.base03}; }
|
|
||||||
.search-bar:focus { border-color: #${c.base0D}; }
|
|
||||||
|
|
||||||
.collapse-btn {
|
|
||||||
flex-shrink: 0;
|
|
||||||
background: none;
|
|
||||||
border: 1px solid #${c.base02};
|
|
||||||
border-radius: 8px;
|
|
||||||
color: #${c.base03};
|
|
||||||
cursor: pointer;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
padding: 0.47rem;
|
|
||||||
transition: color 0.15s ease, border-color 0.15s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.collapse-btn:hover {
|
|
||||||
color: #${c.base0D};
|
|
||||||
border-color: #${c.base0D};
|
|
||||||
}
|
|
||||||
|
|
||||||
.collapse-btn svg {
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bookmarks-container {
|
|
||||||
max-width: 1100px;
|
|
||||||
margin: 0 auto;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 0.75rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.root-section {
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
details.folder-section {
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
details.folder-section > summary {
|
|
||||||
list-style: none;
|
|
||||||
cursor: pointer;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 0.5rem;
|
|
||||||
padding: 0.45rem 0.5rem;
|
|
||||||
border-radius: 8px;
|
|
||||||
user-select: none;
|
|
||||||
transition: background-color 0.12s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
details.folder-section > summary::-webkit-details-marker { display: none; }
|
|
||||||
|
|
||||||
details.folder-section > summary:hover {
|
|
||||||
background-color: #${c.base01};
|
|
||||||
color: #${c.base0D};
|
|
||||||
}
|
|
||||||
|
|
||||||
details.folder-section > summary:hover .folder-name {
|
|
||||||
color: #${c.base0D};
|
|
||||||
}
|
|
||||||
|
|
||||||
details.folder-section > summary:hover .folder-icon {
|
|
||||||
color: #${c.base0D};
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-icon {
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 1;
|
|
||||||
flex-shrink: 0;
|
|
||||||
color: #${c.base04};
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-name {
|
|
||||||
font-size: 0.72rem;
|
|
||||||
font-weight: 700;
|
|
||||||
letter-spacing: 0.12em;
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: #${c.base03};
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chevron {
|
|
||||||
width: 13px;
|
|
||||||
height: 13px;
|
|
||||||
color: #${c.base03};
|
|
||||||
transition: transform 0.2s ease;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
details[open] > summary > .chevron {
|
|
||||||
transform: rotate(180deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-content {
|
|
||||||
padding: 0.4rem 0 0.5rem 0;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 0.25rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-content > details.folder-section > summary {
|
|
||||||
padding-left: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.folder-content > details.folder-section > .folder-content {
|
|
||||||
padding-left: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cards {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
|
|
||||||
gap: 0.4rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 0.7rem;
|
|
||||||
padding: 0.6rem 0.8rem;
|
|
||||||
background-color: #${c.base01};
|
|
||||||
border: 1px solid #${c.base02};
|
|
||||||
border-radius: 10px;
|
|
||||||
text-decoration: none;
|
|
||||||
transition: background-color 0.12s ease, border-color 0.12s ease;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card:hover {
|
|
||||||
background-color: #${c.base02};
|
|
||||||
border-color: #${c.base0D};
|
|
||||||
}
|
|
||||||
|
|
||||||
.favicon-wrapper { position: relative; width: 18px; height: 18px; flex-shrink: 0; }
|
|
||||||
|
|
||||||
.favicon {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
object-fit: contain;
|
|
||||||
border-radius: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.favicon-fallback {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
background-color: #${c.base02};
|
|
||||||
border-radius: 4px;
|
|
||||||
color: #${c.base04};
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: 700;
|
|
||||||
text-transform: uppercase;
|
|
||||||
user-select: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-info {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 0.05rem;
|
|
||||||
overflow: hidden;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-name {
|
|
||||||
color: #${c.base05};
|
|
||||||
font-size: 0.86rem;
|
|
||||||
font-weight: 500;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
transition: color 0.12s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card:hover .card-name { color: #${c.base0D}; }
|
|
||||||
|
|
||||||
.card-url {
|
|
||||||
color: #${c.base03};
|
|
||||||
font-family: 'Maple Mono NF', monospace;
|
|
||||||
font-size: 0.7rem;
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-results {
|
|
||||||
color: #${c.base03};
|
|
||||||
font-size: 0.9rem;
|
|
||||||
padding: 0.5rem 0.2rem;
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="header">
|
|
||||||
<h1 class="page-title">Bookmarks</h1>
|
|
||||||
<input id="search" class="search-bar" type="text" placeholder="Search…" autocomplete="off" spellcheck="false">
|
|
||||||
<button id="collapse-btn" class="collapse-btn" title="Collapse all folders" aria-label="Collapse all folders">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<polyline points="4 14 10 14 10 20"/><polyline points="20 10 14 10 14 4"/><line x1="10" y1="14" x2="3" y2="21"/><line x1="21" y1="3" x2="14" y2="10"/>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="bookmarks-container">
|
|
||||||
<p id="no-results" class="no-results">No results</p>
|
|
||||||
${lib.concatMapStrings mkSection grouped}
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
window.addEventListener('DOMContentLoaded', function () {
|
|
||||||
const input = document.getElementById('search');
|
|
||||||
const noResults = document.getElementById('no-results');
|
|
||||||
const collapseBtn = document.getElementById('collapse-btn');
|
|
||||||
|
|
||||||
input.focus();
|
|
||||||
|
|
||||||
collapseBtn.addEventListener('click', function () {
|
|
||||||
document.querySelectorAll('details.folder-section').forEach(function (d) {
|
|
||||||
d.open = false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
input.addEventListener('input', function () {
|
|
||||||
const query = this.value.toLowerCase().trim();
|
|
||||||
let anyVisible = false;
|
|
||||||
|
|
||||||
if (query) {
|
|
||||||
document.querySelectorAll('details.folder-section').forEach(function (d) {
|
|
||||||
d.open = true;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelectorAll('.folder-section, .root-section').forEach(function (section) {
|
|
||||||
let sectionVisible = false;
|
|
||||||
section.querySelectorAll('.card').forEach(function (card) {
|
|
||||||
const name = card.querySelector('.card-name').textContent.toLowerCase();
|
|
||||||
const url = card.querySelector('.card-url').textContent.toLowerCase();
|
|
||||||
const match = !query || name.includes(query) || url.includes(query);
|
|
||||||
card.style.display = match ? ''' : 'none';
|
|
||||||
if (match) { sectionVisible = true; anyVisible = true; }
|
|
||||||
});
|
|
||||||
section.style.display = sectionVisible ? ''' : 'none';
|
|
||||||
});
|
|
||||||
|
|
||||||
noResults.style.display = anyVisible || !query ? 'none' : 'block';
|
|
||||||
});
|
|
||||||
|
|
||||||
input.addEventListener('keydown', function (e) {
|
|
||||||
if (e.key === 'Enter') {
|
|
||||||
const val = this.value.trim();
|
|
||||||
const isUrl = /^https?:\/\//i.test(val) || /^[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})(\/.*)?$/.test(val);
|
|
||||||
if (isUrl) {
|
|
||||||
location.href = /^https?:\/\//i.test(val) ? val : 'https://' + val;
|
|
||||||
} else {
|
|
||||||
const first = document.querySelector('.card:not([style*="none"])');
|
|
||||||
if (first) {
|
|
||||||
location.href = first.href;
|
|
||||||
} else {
|
|
||||||
const q = encodeURIComponent(val);
|
|
||||||
if (q) location.href = 'https://www.startpage.com/sp/search?q=' + q;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (e.key === 'Escape') {
|
|
||||||
this.value = ''';
|
|
||||||
this.dispatchEvent(new Event('input'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.activation.qutebrowserBookmarks = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
|
||||||
mkdir -p ${config.home.homeDirectory}/.config/qutebrowser/bookmarks
|
|
||||||
cat ${publicBookmarks} > ${config.home.homeDirectory}/.config/qutebrowser/bookmarks/urls
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./bookmarks
|
|
||||||
./search.nix
|
|
||||||
./keybindings.nix
|
|
||||||
./settings.nix
|
|
||||||
./userscripts.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
DEFAULT_BROWSER = "qutebrowser";
|
|
||||||
BROWSER = "qutebrowser";
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.mimeApps.defaultApplications = {
|
|
||||||
"text/html" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
"text/xml" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
"x-scheme-handler/http" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
"x-scheme-handler/https" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
"x-scheme-handler/unknown" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
"x-scheme-handler/about" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
"x-scheme-handler/qute" = ["org.qutebrowser.qutebrowser.desktop"];
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.desktopEntries.qutebrowser-private = {
|
|
||||||
name = "Qutebrowser (Temp session)";
|
|
||||||
genericName = "Web Browser";
|
|
||||||
exec = "qutebrowser --temp-basedir %U";
|
|
||||||
icon = "qutebrowser";
|
|
||||||
categories = [
|
|
||||||
"Network"
|
|
||||||
"WebBrowser"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.qutebrowser = {
|
|
||||||
enable = true;
|
|
||||||
loadAutoconfig = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{config, ...}: {
|
|
||||||
programs.qutebrowser.keyBindings = {
|
|
||||||
normal."<Ctrl-w>" = "tab-close";
|
|
||||||
normal."<Ctrl-Tab>" = "tab-next";
|
|
||||||
normal."<Ctrl-Shift-Tab>" = "tab-prev";
|
|
||||||
normal."<Ctrl-b>" = "open file://${config.xdg.dataHome}/qutebrowser/bookmarks.html";
|
|
||||||
|
|
||||||
# Ctrl+c is used to leave the current mode and return to normal mode.
|
|
||||||
insert."<Ctrl-c>" = "mode-leave";
|
|
||||||
hint."<Ctrl-c>" = "mode-leave";
|
|
||||||
caret."<Ctrl-c>" = "mode-leave";
|
|
||||||
command."<Ctrl-c>" = "mode-leave";
|
|
||||||
prompt."<Ctrl-c>" = "mode-leave";
|
|
||||||
yesno."<Ctrl-c>" = "mode-leave";
|
|
||||||
register."<Ctrl-c>" = "mode-leave";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
programs.qutebrowser.searchEngines = rec {
|
|
||||||
startpage = "https://www.startpage.com/sp/search?q={}";
|
|
||||||
|
|
||||||
mynixos = "https://mynixos.com/search?q={}";
|
|
||||||
duckduckgo = "https://duckduckgo.com/?q={}";
|
|
||||||
google = "https://google.com/search?hl=en&q={}";
|
|
||||||
yandex = "https://yandex.com/search/?text={}";
|
|
||||||
bing = "https://bing.com/search?q={}";
|
|
||||||
youtube = "https://youtube.com/results?search_query={}";
|
|
||||||
google-images = "https://google.com/search?hl=en&tbm=isch&q={}";
|
|
||||||
|
|
||||||
# AI
|
|
||||||
chatgpt = "https://chatgpt.com/?q={}";
|
|
||||||
claude = "https://claude.ai/new?q={}";
|
|
||||||
gemini = "https://gemini.google.com/app?q={}";
|
|
||||||
|
|
||||||
# Maps
|
|
||||||
amap = "https://maps.apple.com/?q={}";
|
|
||||||
gmap = "https://www.google.com/maps/search/{}";
|
|
||||||
|
|
||||||
# shortcuts
|
|
||||||
g = google;
|
|
||||||
n = mynixos;
|
|
||||||
gpt = chatgpt;
|
|
||||||
gem = gemini;
|
|
||||||
cla = claude;
|
|
||||||
DEFAULT = startpage;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
{config, ...}: {
|
|
||||||
programs.qutebrowser = {
|
|
||||||
settings = {
|
|
||||||
url = rec {
|
|
||||||
default_page = "file://${config.xdg.dataHome}/qutebrowser/bookmarks.html";
|
|
||||||
start_pages = [default_page];
|
|
||||||
};
|
|
||||||
new_instance_open_target = "window";
|
|
||||||
"tabs.last_close" = "close";
|
|
||||||
"statusbar.widgets" = [
|
|
||||||
"keypress"
|
|
||||||
"url"
|
|
||||||
"progress"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Adblock
|
|
||||||
"content.blocking.enabled" = true;
|
|
||||||
"content.blocking.method" = "adblock";
|
|
||||||
"content.blocking.adblock.lists" = [
|
|
||||||
"https://easylist.to/easylist/easylist.txt"
|
|
||||||
"https://easylist.to/easylist/easyprivacy.txt"
|
|
||||||
"https://secure.fanboy.co.nz/fanboy-cookiemonster.txt"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Clipboard access (needed for Excalidraw, Cyberchef, etc.)
|
|
||||||
"content.javascript.clipboard" = "access";
|
|
||||||
|
|
||||||
# Downloads
|
|
||||||
"downloads.location.directory" = "~/Downloads";
|
|
||||||
"downloads.location.prompt" = false;
|
|
||||||
|
|
||||||
# Editor (Ctrl+e in text fields)
|
|
||||||
"editor.command" = [
|
|
||||||
"ghostty"
|
|
||||||
"-e"
|
|
||||||
"nvim"
|
|
||||||
"{}"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Tabs
|
|
||||||
# "tabs.show" = "switching";
|
|
||||||
# "tabs.show_switching_delay" = 3000;
|
|
||||||
|
|
||||||
# Scrollbar
|
|
||||||
"scrolling.bar" = "never";
|
|
||||||
|
|
||||||
# Statusbar
|
|
||||||
"statusbar.show" = "in-mode";
|
|
||||||
|
|
||||||
# Privacy
|
|
||||||
"content.geolocation" = false;
|
|
||||||
"content.cookies.accept" = "no-3rdparty";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraConfig = ''
|
|
||||||
c.statusbar.padding = {'top': 6, 'bottom': 6, 'left': 8, 'right': 8}
|
|
||||||
c.tabs.padding = {'top': 6, 'bottom': 6, 'left': 8, 'right': 8}
|
|
||||||
config.set('content.local_content_can_access_remote_urls', True, 'file://*')
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
xdg.dataFile."qutebrowser/greasemonkey/startpage-no-ads.user.js".text = ''
|
|
||||||
// ==UserScript==
|
|
||||||
// @name Startpage - Hide Ads
|
|
||||||
// @match https://www.startpage.com/*
|
|
||||||
// @run-at document-start
|
|
||||||
// ==/UserScript==
|
|
||||||
|
|
||||||
new MutationObserver(function(mutations) {
|
|
||||||
mutations.forEach((mutation) => {
|
|
||||||
if (mutation.type === 'childList') {
|
|
||||||
mutation.addedNodes.forEach((node) => {
|
|
||||||
if (node.nodeType === 1 && node.nodeName === 'DIV' && node.id === 'gcsa-top') {
|
|
||||||
node.remove();
|
|
||||||
this.disconnect();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).observe(document, { childList: true, subtree: true });
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.activation.downloadUserscripts = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
|
||||||
scripts_dir="${config.home.homeDirectory}/.local/share/qutebrowser/greasemonkey"
|
|
||||||
$DRY_RUN_CMD mkdir -p "$scripts_dir"
|
|
||||||
|
|
||||||
download() {
|
|
||||||
local name="$1" url="$2"
|
|
||||||
if [[ ! -f "$scripts_dir/$name" ]]; then
|
|
||||||
$DRY_RUN_CMD ${pkgs.curl}/bin/curl -sSL -o "$scripts_dir/$name" "$url" || true
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
download "return-youtube-dislike.user.js" "https://update.greasyfork.org/scripts/436115/Return%20YouTube%20Dislike.user.js"
|
|
||||||
download "sponsorblock-lite.user.js" "https://update.greasyfork.org/scripts/560869/SponsorBlock%20Lite.user.js"
|
|
||||||
download "dont-track-me-google.user.js" "https://update.greasyfork.org/scripts/428243/Don%27t%20track%20me%20Google.user.js"
|
|
||||||
download "i-dont-care-about-cookies.user.js" "https://update.greasyfork.org/scripts/522645/I%20don%27t%20care%20about%20cookies.user.js"
|
|
||||||
download "tracking-token-stripper.user.js" "https://github.com/doggy8088/TrackingTokenStripper/raw/refs/heads/master/TrackingTokenStripper.user.js"
|
|
||||||
download "bypass-paywalls-clean.user.js" "https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.en.user.js"
|
|
||||||
download "anti-adblock-fuckoff.user.js" "https://update.greasyfork.org/scripts/397070/Anti-AdBlocker%20Fuckoff.user.js"
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
+42
-34
@@ -4,14 +4,10 @@
|
|||||||
lib,
|
lib,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
fetch = config.theme.fetch; # neofetch, nerdfetch, pfetch
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
bat
|
bat
|
||||||
ripgrep
|
ripgrep
|
||||||
tldr
|
|
||||||
witr
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# Add go binaries to the PATH
|
# Add go binaries to the PATH
|
||||||
@@ -49,28 +45,23 @@ in {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
|
# Change default
|
||||||
vim = "nvim";
|
vim = "nvim";
|
||||||
vi = "nvim";
|
vi = "nvim";
|
||||||
v = "nvim";
|
|
||||||
c = "clear";
|
|
||||||
clera = "clear";
|
|
||||||
celar = "clear";
|
|
||||||
e = "exit";
|
|
||||||
cd = "z";
|
cd = "z";
|
||||||
ls = "eza --icons=always --no-quotes";
|
ls = "eza --icons=always --no-quotes";
|
||||||
tree = "eza --icons=always --tree --no-quotes";
|
tree = "eza --icons=always --tree --no-quotes";
|
||||||
sl = "ls";
|
|
||||||
open = "${pkgs.xdg-utils}/bin/xdg-open";
|
|
||||||
cat = "bat --theme=base16 --color=always --paging=never --tabs=2 --wrap=never --plain";
|
cat = "bat --theme=base16 --color=always --paging=never --tabs=2 --wrap=never --plain";
|
||||||
mkdir = "mkdir -p";
|
mkdir = "mkdir -p";
|
||||||
|
|
||||||
obsidian-no-gpu = "env ELECTRON_OZONE_PLATFORM_HINT=auto obsidian --ozone-platform=x11";
|
# Shortcuts
|
||||||
wireguard-import = "nmcli connection import type wireguard file";
|
spt = "spotatui";
|
||||||
|
v = "nvim";
|
||||||
|
c = "clear";
|
||||||
|
e = "exit";
|
||||||
|
open = "${pkgs.xdg-utils}/bin/xdg-open";
|
||||||
|
|
||||||
notes = "nvim ~/notes/index.md --cmd 'cd ~/notes' -c ':lua Snacks.picker.smart()'";
|
notes = "nvim ~/notes/index.md --cmd 'cd ~/notes' -c ':lua Snacks.picker.smart()'";
|
||||||
note = "notes";
|
|
||||||
tmp = "nvim /tmp/$(date | sed 's/ //g;s/\\.//g').md";
|
|
||||||
|
|
||||||
nix-shell = "nix-shell --command zsh";
|
nix-shell = "nix-shell --command zsh";
|
||||||
|
|
||||||
# git
|
# git
|
||||||
@@ -87,31 +78,41 @@ in {
|
|||||||
gbr = "git branch";
|
gbr = "git branch";
|
||||||
grs = "git reset HEAD~1";
|
grs = "git reset HEAD~1";
|
||||||
grh = "git reset --hard HEAD~1";
|
grh = "git reset --hard HEAD~1";
|
||||||
|
|
||||||
gaa = "git add .";
|
gaa = "git add .";
|
||||||
gcm = "git commit -m";
|
gcm = "git commit -m";
|
||||||
|
|
||||||
|
# Typo
|
||||||
|
clera = "clear";
|
||||||
|
celar = "clear";
|
||||||
|
claer = "clear";
|
||||||
|
sl = "ls";
|
||||||
};
|
};
|
||||||
|
|
||||||
initContent =
|
initContent =
|
||||||
# bash
|
# bash
|
||||||
''
|
''
|
||||||
bindkey -e
|
bindkey -e
|
||||||
${
|
|
||||||
if fetch == "neofetch"
|
|
||||||
then pkgs.neofetch + "/bin/neofetch"
|
|
||||||
else if fetch == "nerdfetch"
|
|
||||||
then "nerdfetch"
|
|
||||||
else if fetch == "pfetch"
|
|
||||||
then "echo; ${pkgs.pfetch}/bin/pfetch"
|
|
||||||
else ""
|
|
||||||
}
|
|
||||||
|
|
||||||
function n4c() {
|
# Open command in VIM
|
||||||
category=''${1:-all}
|
autoload -Uz edit-command-line
|
||||||
shift
|
zle -N edit-command-line
|
||||||
args=''${*}
|
bindkey '^X' edit-command-line
|
||||||
nix develop "github:nix4cyber/n4c#''${category}" ''${args} -c zsh
|
|
||||||
}
|
# Suffix Aliases
|
||||||
|
alias -s {nix,md,txt,json,yml,yaml,go}=nvim
|
||||||
|
alias -s {png,jpg,jpeg,gif,pdf}=xdg-open
|
||||||
|
|
||||||
|
# 3. Global Aliases (Remplacés n'importe où dans la commande, pas seulement au début)
|
||||||
|
alias -g G="| grep"
|
||||||
|
alias -g L="| less"
|
||||||
|
alias -g V="| nvim"
|
||||||
|
alias -g H="| head"
|
||||||
|
alias -g T="| tail"
|
||||||
|
alias -g JQ="| jq"
|
||||||
|
alias -g C="| wl-copy"
|
||||||
|
alias -g NE="2>/dev/null"
|
||||||
|
alias -g ND=">/dev/null"
|
||||||
|
alias -g NUL=">/dev/null 2>1"
|
||||||
|
|
||||||
# search history based on what's typed in the prompt
|
# search history based on what's typed in the prompt
|
||||||
autoload -U history-search-end
|
autoload -U history-search-end
|
||||||
@@ -152,7 +153,7 @@ in {
|
|||||||
# Colors
|
# Colors
|
||||||
zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS}
|
zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS}
|
||||||
|
|
||||||
# case insensitive tab completion
|
# Case insensitive tab completion
|
||||||
zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
|
zstyle ':completion:*:*:cd:*' tag-order local-directories directory-stack path-directories
|
||||||
zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
|
zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
|
||||||
zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
|
zstyle ':completion:*:-tilde-:*' group-order 'named-directories' 'path-directories' 'users' 'expand'
|
||||||
@@ -168,6 +169,13 @@ in {
|
|||||||
zstyle ':completion:complete:*:options' sort false
|
zstyle ':completion:complete:*:options' sort false
|
||||||
zstyle ':completion:files' sort false
|
zstyle ':completion:files' sort false
|
||||||
|
|
||||||
|
autoload zmv
|
||||||
|
|
||||||
|
hash -d dl=~/Downloads
|
||||||
|
hash -d ni=~/.config/nixos
|
||||||
|
hash -d de=~/dev
|
||||||
|
hash -d cy=~/Cyber
|
||||||
|
|
||||||
${lib.optionalString config.services.gpg-agent.enable ''
|
${lib.optionalString config.services.gpg-agent.enable ''
|
||||||
gnupg_path=$(ls $XDG_RUNTIME_DIR/gnupg)
|
gnupg_path=$(ls $XDG_RUNTIME_DIR/gnupg)
|
||||||
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/$gnupg_path/S.gpg-agent.ssh"
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/$gnupg_path/S.gpg-agent.ssh"
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
# Spicetify is a spotify client customizer
|
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
pkgs-stable,
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system};
|
|
||||||
accent = "${config.lib.stylix.colors.base0D}";
|
|
||||||
background = "${config.lib.stylix.colors.base00}";
|
|
||||||
in {
|
|
||||||
imports = [inputs.spicetify-nix.homeManagerModules.default];
|
|
||||||
|
|
||||||
stylix.targets.spicetify.enable = false;
|
|
||||||
|
|
||||||
programs.spicetify = {
|
|
||||||
enable = true;
|
|
||||||
spotifyPackage = pkgs-stable.spotify;
|
|
||||||
theme = lib.mkForce spicePkgs.themes.dribbblish;
|
|
||||||
|
|
||||||
colorScheme = "custom";
|
|
||||||
|
|
||||||
customColorScheme = {
|
|
||||||
button = accent;
|
|
||||||
button-active = accent;
|
|
||||||
tab-active = accent;
|
|
||||||
player = background;
|
|
||||||
main = background;
|
|
||||||
sidebar = background;
|
|
||||||
};
|
|
||||||
|
|
||||||
enabledExtensions = with spicePkgs.extensions; [
|
|
||||||
playlistIcons
|
|
||||||
historyShortcut
|
|
||||||
hidePodcasts
|
|
||||||
adblock
|
|
||||||
fullAppDisplay
|
|
||||||
keyboardShortcut
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
# Spotatui is a terminal user interface for Spotify, written in Rust. It allows you to control your Spotify playback and manage your playlists directly from the terminal.
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
|
rgb = base: "${c."${base}-rgb-r"}, ${c."${base}-rgb-g"}, ${c."${base}-rgb-b"}";
|
||||||
|
in {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
spotatui
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".config/spotatui/config.yml".text = ''
|
||||||
|
keybindings:
|
||||||
|
back: q
|
||||||
|
next_page: ctrl-d
|
||||||
|
previous_page: ctrl-u
|
||||||
|
jump_to_start: ctrl-a
|
||||||
|
jump_to_end: ctrl-e
|
||||||
|
jump_to_album: a
|
||||||
|
jump_to_artist_album: A
|
||||||
|
jump_to_context: o
|
||||||
|
manage_devices: d
|
||||||
|
decrease_volume: '-'
|
||||||
|
increase_volume: +
|
||||||
|
toggle_playback: space
|
||||||
|
seek_backwards: <
|
||||||
|
seek_forwards: '>'
|
||||||
|
next_track: n
|
||||||
|
previous_track: p
|
||||||
|
force_previous_track: P
|
||||||
|
help: '?'
|
||||||
|
shuffle: ctrl-s
|
||||||
|
repeat: ctrl-r
|
||||||
|
search: /
|
||||||
|
submit: enter
|
||||||
|
copy_song_url: c
|
||||||
|
copy_album_url: C
|
||||||
|
audio_analysis: v
|
||||||
|
lyrics_view: B
|
||||||
|
cover_art_view: G
|
||||||
|
add_item_to_queue: z
|
||||||
|
show_queue: Q
|
||||||
|
open_settings: alt-,
|
||||||
|
save_settings: alt-s
|
||||||
|
listening_party: ctrl-p
|
||||||
|
like_track: F
|
||||||
|
behavior:
|
||||||
|
seek_milliseconds: 5000
|
||||||
|
volume_increment: 10
|
||||||
|
volume_percent: 100
|
||||||
|
tick_rate_milliseconds: 16
|
||||||
|
enable_text_emphasis: true
|
||||||
|
show_loading_indicator: true
|
||||||
|
enforce_wide_search_bar: true
|
||||||
|
enable_global_song_count: false
|
||||||
|
disable_mouse_inputs: false
|
||||||
|
enable_discord_rpc: false
|
||||||
|
discord_rpc_client_id: null
|
||||||
|
enable_announcements: false
|
||||||
|
announcement_feed_url: null
|
||||||
|
seen_announcement_ids:
|
||||||
|
- 2026-05-19-sonos-help-wanted
|
||||||
|
- 2026-02-27-major-refactor-complete
|
||||||
|
shuffle_enabled: false
|
||||||
|
liked_icon: ♥
|
||||||
|
shuffle_icon: 🔀
|
||||||
|
repeat_track_icon: 🔂
|
||||||
|
repeat_context_icon: 🔁
|
||||||
|
playing_icon: ▶
|
||||||
|
paused_icon: ⏸
|
||||||
|
set_window_title: true
|
||||||
|
visualizer_style: Equalizer
|
||||||
|
dismissed_announcements: []
|
||||||
|
relay_server_url: wss://spotatui-party.spotatui.workers.dev/ws
|
||||||
|
stop_after_current_track: false
|
||||||
|
sidebar_width_percent: 20
|
||||||
|
playbar_height_rows: 6
|
||||||
|
library_height_percent: 30
|
||||||
|
startup_behavior: continue
|
||||||
|
disable_auto_update: true
|
||||||
|
auto_update_delay: '0'
|
||||||
|
keepawake_enabled: true
|
||||||
|
theme:
|
||||||
|
preset: Custom
|
||||||
|
active: ${rgb "base0D"}
|
||||||
|
banner: ${rgb "base0C"}
|
||||||
|
error_border: ${rgb "base08"}
|
||||||
|
error_text: ${rgb "base08"}
|
||||||
|
hint: ${rgb "base0A"}
|
||||||
|
hovered: ${rgb "base0E"}
|
||||||
|
inactive: ${rgb "base03"}
|
||||||
|
playbar_background: Reset
|
||||||
|
playbar_progress: ${rgb "base0D"}
|
||||||
|
playbar_progress_text: ${rgb "base05"}
|
||||||
|
playbar_text: Reset
|
||||||
|
selected: ${rgb "base0D"}
|
||||||
|
text: Reset
|
||||||
|
background: Reset
|
||||||
|
header: Reset
|
||||||
|
highlighted_lyrics: ${rgb "base0B"}
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -35,8 +35,6 @@ in {
|
|||||||
package = pkgs.papirus-icon-theme;
|
package = pkgs.papirus-icon-theme;
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk4.theme = null;
|
|
||||||
|
|
||||||
# bookmarks for the side pane
|
# bookmarks for the side pane
|
||||||
gtk3.bookmarks = [
|
gtk3.bookmarks = [
|
||||||
"file:///home/${user}/Downloads Downloads"
|
"file:///home/${user}/Downloads Downloads"
|
||||||
|
|||||||
@@ -0,0 +1,129 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
programs.yazi = {
|
||||||
|
enable = true;
|
||||||
|
shellWrapperName = "y";
|
||||||
|
|
||||||
|
plugins = {
|
||||||
|
git = {
|
||||||
|
package = pkgs.yaziPlugins.git;
|
||||||
|
setup = true;
|
||||||
|
};
|
||||||
|
ouch = pkgs.yaziPlugins.ouch;
|
||||||
|
piper = pkgs.yaziPlugins.piper;
|
||||||
|
convert = pkgs.yaziPlugins.convert;
|
||||||
|
"jump-to-char" = pkgs.yaziPlugins."jump-to-char";
|
||||||
|
"wl-clipboard" = pkgs.yaziPlugins."wl-clipboard";
|
||||||
|
"batch-rename-gui" = pkgs.yaziPlugins.mkYaziPlugin {
|
||||||
|
pname = "batch-rename-gui.yazi";
|
||||||
|
version = "0-unstable-2025-07-08";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "pakhromov";
|
||||||
|
repo = "batch-rename-gui.yazi";
|
||||||
|
rev = "5c2d5aa349948b6ab405a171541faab44751f6a5";
|
||||||
|
hash = "sha256-3RviPY3WOyYi5GWXWRYMWp6VLxCe5cuJX7Kb7AyWxLE=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
settings.mgr.ratio = [0 4 3];
|
||||||
|
|
||||||
|
settings.plugin = {
|
||||||
|
prepend_fetchers = [
|
||||||
|
{
|
||||||
|
url = "*";
|
||||||
|
run = "git";
|
||||||
|
group = "git";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
url = "*/";
|
||||||
|
run = "git";
|
||||||
|
group = "git";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
prepend_previewers = [
|
||||||
|
{
|
||||||
|
url = "*.md";
|
||||||
|
run = ''piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
prepend_openers = [
|
||||||
|
{
|
||||||
|
url = "*.{zip,tar,gz,bz2,xz,7z,rar}";
|
||||||
|
run = "ouch";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
keymap.mgr.prepend_keymap = [
|
||||||
|
{
|
||||||
|
on = ["C"];
|
||||||
|
run = "plugin ouch";
|
||||||
|
desc = "Compress";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["X"];
|
||||||
|
run = "plugin ouch --args=extract";
|
||||||
|
desc = "Extract";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["c" "p"];
|
||||||
|
run = "plugin convert -- --extension='png'";
|
||||||
|
desc = "Convert to PNG";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["c" "j"];
|
||||||
|
run = "plugin convert -- --extension='jpg'";
|
||||||
|
desc = "Convert to JPG";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["c" "w"];
|
||||||
|
run = "plugin convert -- --extension='webp'";
|
||||||
|
desc = "Convert to WebP";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["M"];
|
||||||
|
run = ''shell 'exiftool "$@" | less' --block'';
|
||||||
|
desc = "Show metadata";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["T"];
|
||||||
|
run = "plugin toggle-parent";
|
||||||
|
desc = "Toggle parent pane";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["F"];
|
||||||
|
run = "plugin jump-to-char";
|
||||||
|
desc = "Jump to char";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["Y"];
|
||||||
|
run = "plugin wl-clipboard";
|
||||||
|
desc = "Copy to clipboard (Wayland)";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
on = ["B"];
|
||||||
|
run = "plugin batch-rename-gui";
|
||||||
|
desc = "Batch rename";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [glow ouch hexyl exiftool fzf wl-clipboard];
|
||||||
|
|
||||||
|
xdg.configFile."yazi/plugins/toggle-parent.yazi/main.lua".text = ''
|
||||||
|
--- @sync entry
|
||||||
|
local RESTORE_WIDTH = 1
|
||||||
|
return {
|
||||||
|
entry = function(st, job)
|
||||||
|
local r = rt.mgr.ratio
|
||||||
|
if r.parent == 0 then
|
||||||
|
rt.mgr.ratio = { st.width or RESTORE_WIDTH, r.current, r.preview }
|
||||||
|
else
|
||||||
|
st.width = r.parent
|
||||||
|
rt.mgr.ratio = { 0, r.current, r.preview }
|
||||||
|
end
|
||||||
|
ya.emit("app:resize", {})
|
||||||
|
end
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
rounding = config.theme.rounding + config.theme.gaps-out;
|
inherit (config.theme) bar-rounding bar-thickness;
|
||||||
inherit (config.stylix) fonts;
|
inherit (config.stylix) fonts;
|
||||||
in {
|
in {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
@@ -16,8 +16,8 @@ in {
|
|||||||
appearance = {
|
appearance = {
|
||||||
transparency = {
|
transparency = {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
base = 0.85;
|
base = config.theme.active-opacity;
|
||||||
layers = 0.4;
|
layers = config.theme.inactive-opacity;
|
||||||
};
|
};
|
||||||
font.family = {
|
font.family = {
|
||||||
material = "Material Symbols Rounded";
|
material = "Material Symbols Rounded";
|
||||||
@@ -43,8 +43,8 @@ in {
|
|||||||
};
|
};
|
||||||
dashboard.showOnHover = false;
|
dashboard.showOnHover = false;
|
||||||
border = {
|
border = {
|
||||||
inherit rounding;
|
rounding = bar-rounding;
|
||||||
thickness = 8;
|
thickness = bar-thickness;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,13 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
# shell.json is managed by home-manager (read-only symlink) but caelestia
|
# shell.json is managed by home-manager (read-only symlink) but caelestia
|
||||||
# needs to write to it at runtime: replace the symlink with a mutable copy
|
# needs to write to it at runtime: replace the symlink with a mutable copy.
|
||||||
|
# The stale .hm-backup must be removed before linkGeneration so HM can
|
||||||
|
# back up the runtime-modified shell.json without hitting a conflict.
|
||||||
|
home.activation.caelestiaCleanBackup = lib.hm.dag.entryBefore ["linkGeneration"] ''
|
||||||
|
$DRY_RUN_CMD rm -f "$HOME/.config/caelestia/shell.json.hm-backup"
|
||||||
|
'';
|
||||||
|
|
||||||
home.activation.caelestiaWritableShellConfig = lib.hm.dag.entryAfter ["linkGeneration"] ''
|
home.activation.caelestiaWritableShellConfig = lib.hm.dag.entryAfter ["linkGeneration"] ''
|
||||||
if [ -L "$HOME/.config/caelestia/shell.json" ]; then
|
if [ -L "$HOME/.config/caelestia/shell.json" ]; then
|
||||||
$DRY_RUN_CMD cp --remove-destination \
|
$DRY_RUN_CMD cp --remove-destination \
|
||||||
|
|||||||
@@ -154,6 +154,21 @@
|
|||||||
enabled = true;
|
enabled = true;
|
||||||
dangerous = false;
|
dangerous = false;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "Run in background";
|
||||||
|
icon = "play_circle";
|
||||||
|
description = "Type and run any shell command in the background";
|
||||||
|
command = [
|
||||||
|
"ghostty"
|
||||||
|
"--title=run-bg"
|
||||||
|
"-e"
|
||||||
|
"bash"
|
||||||
|
"-c"
|
||||||
|
"printf 'Run: '; read -r cmd; [ -n \"$cmd\" ] && hyprctl dispatch exec \"$cmd\""
|
||||||
|
];
|
||||||
|
enabled = true;
|
||||||
|
dangerous = false;
|
||||||
|
}
|
||||||
];
|
];
|
||||||
dragThreshold = 50;
|
dragThreshold = 50;
|
||||||
enableDangerousActions = false;
|
enableDangerousActions = false;
|
||||||
|
|||||||
@@ -53,12 +53,12 @@ in {
|
|||||||
{
|
{
|
||||||
key = "c";
|
key = "c";
|
||||||
desc = "Proton Calendar";
|
desc = "Proton Calendar";
|
||||||
cmd = "${pkgs.qutebrowser}/bin/qutebrowser 'https://calendar.proton.me/'";
|
cmd = "${config.programs.helium.package}/bin/helium 'https://calendar.proton.me/'";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "m";
|
key = "m";
|
||||||
desc = "Proton Mail";
|
desc = "Proton Mail";
|
||||||
cmd = "${pkgs.qutebrowser}/bin/qutebrowser 'https://mail.proton.me/'";
|
cmd = "${config.programs.helium.package}/bin/helium 'https://mail.proton.me/'";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "o";
|
key = "o";
|
||||||
@@ -77,19 +77,18 @@ in {
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "b";
|
key = "b";
|
||||||
desc = "Qutebrowser";
|
desc = "Helium";
|
||||||
cmd = "${pkgs.qutebrowser}/bin/qutebrowser";
|
cmd = "${config.programs.helium.package}/bin/helium";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "i";
|
key = "i";
|
||||||
desc = "Qutebrowser (Temp session)";
|
desc = "Helium (Incognito)";
|
||||||
cmd = "${pkgs.qutebrowser}/bin/qutebrowser --temp-basedir";
|
cmd = "${config.programs.helium.package}/bin/helium --incognito";
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
|
|
||||||
# Web links
|
"$mod,B, exec, uwsm app -- ${config.programs.helium.package}/bin/helium" # Browser
|
||||||
"$mod,B, exec, uwsm app -- ${pkgs.qutebrowser}/bin/qutebrowser" # Browser (Qutebrowser)
|
|
||||||
|
|
||||||
# Power
|
# Power
|
||||||
"$mod, X, global, caelestia:session" # Powermenu
|
"$mod, X, global, caelestia:session" # Powermenu
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ in {
|
|||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
configType = "hyprlang";
|
||||||
xwayland.enable = true;
|
xwayland.enable = true;
|
||||||
systemd = {
|
systemd = {
|
||||||
enable = false;
|
enable = false;
|
||||||
@@ -123,6 +124,8 @@ in {
|
|||||||
|
|
||||||
windowrule = [
|
windowrule = [
|
||||||
"match:class .*, suppress_event maximize"
|
"match:class .*, suppress_event maximize"
|
||||||
|
"match:class helium, suppress_event fullscreen"
|
||||||
|
"match:class helium, sync_fullscreen false"
|
||||||
|
|
||||||
"match:class proton-authenticator, float on"
|
"match:class proton-authenticator, float on"
|
||||||
"match:class proton-authenticator, center on"
|
"match:class proton-authenticator, center on"
|
||||||
@@ -131,6 +134,10 @@ in {
|
|||||||
"match:class protonvpn-app, float on"
|
"match:class protonvpn-app, float on"
|
||||||
"match:class protonvpn-app, center on"
|
"match:class protonvpn-app, center on"
|
||||||
"match:class protonvpn-app, size 500 400"
|
"match:class protonvpn-app, size 500 400"
|
||||||
|
|
||||||
|
"match:title run-bg, float on"
|
||||||
|
"match:title run-bg, center on"
|
||||||
|
"match:title run-bg, size 700 80"
|
||||||
];
|
];
|
||||||
|
|
||||||
misc = {
|
misc = {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ with lib; let
|
|||||||
pdf = ["zathura.desktop"];
|
pdf = ["zathura.desktop"];
|
||||||
terminal = ["ghostty.desktop"];
|
terminal = ["ghostty.desktop"];
|
||||||
archive = ["xarchiver.desktop"];
|
archive = ["xarchiver.desktop"];
|
||||||
|
browser = ["helium.desktop"];
|
||||||
};
|
};
|
||||||
|
|
||||||
mimeMap = {
|
mimeMap = {
|
||||||
@@ -110,6 +111,13 @@ with lib; let
|
|||||||
"application/7z"
|
"application/7z"
|
||||||
"application/*tar"
|
"application/*tar"
|
||||||
];
|
];
|
||||||
|
browser = [
|
||||||
|
"text/html"
|
||||||
|
"application/xhtml+xml"
|
||||||
|
"x-scheme-handler/http"
|
||||||
|
"x-scheme-handler/https"
|
||||||
|
"x-scheme-handler/ftp"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
nvim-ghostty = pkgs.makeDesktopItem {
|
nvim-ghostty = pkgs.makeDesktopItem {
|
||||||
|
|||||||
@@ -8,11 +8,12 @@
|
|||||||
../../nixos/home-manager.nix
|
../../nixos/home-manager.nix
|
||||||
../../nixos/nix.nix
|
../../nixos/nix.nix
|
||||||
../../nixos/systemd-boot.nix
|
../../nixos/systemd-boot.nix
|
||||||
../../nixos/sddm.nix
|
../../nixos/tuigreet.nix
|
||||||
../../nixos/users.nix
|
../../nixos/users.nix
|
||||||
../../nixos/utils.nix
|
../../nixos/utils.nix
|
||||||
../../nixos/hyprland.nix
|
../../nixos/hyprland.nix
|
||||||
../../nixos/usbguard.nix
|
../../nixos/usbguard.nix
|
||||||
|
../../home/programs/helium/system.nix # I hate browser's configuration..
|
||||||
|
|
||||||
../../nixos/omen.nix # CHANGEME: For my laptop only, remove this (OMEN 16)
|
../../nixos/omen.nix # CHANGEME: For my laptop only, remove this (OMEN 16)
|
||||||
|
|
||||||
|
|||||||
+1
-12
@@ -7,18 +7,6 @@ nixpkgs.lib.nixosSystem {
|
|||||||
modules = [
|
modules = [
|
||||||
{
|
{
|
||||||
nixpkgs.overlays = [
|
nixpkgs.overlays = [
|
||||||
(final: prev: {
|
|
||||||
# FIXME: Workaround: Mesa crash with AMD GPU + Wayland + Qt 6.11.0
|
|
||||||
qutebrowser = prev.symlinkJoin {
|
|
||||||
name = "qutebrowser";
|
|
||||||
paths = [prev.qutebrowser];
|
|
||||||
buildInputs = [prev.makeWrapper];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/qutebrowser \
|
|
||||||
--set LIBGL_ALWAYS_SOFTWARE 1
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
_module.args = {inherit inputs;};
|
_module.args = {inherit inputs;};
|
||||||
}
|
}
|
||||||
@@ -26,6 +14,7 @@ nixpkgs.lib.nixosSystem {
|
|||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
inputs.stylix.nixosModules.stylix
|
inputs.stylix.nixosModules.stylix
|
||||||
inputs.nix-index-database.nixosModules.default
|
inputs.nix-index-database.nixosModules.default
|
||||||
|
inputs.helium-browser.nixosModules.default
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{config, ...}: {
|
{config, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
# Programs
|
# Programs
|
||||||
../../home/programs/brave
|
../../home/programs/helium
|
||||||
../../home/programs/proton
|
../../home/programs/proton
|
||||||
../../home/programs/proton/auto-start-vpn.nix
|
../../home/programs/proton/auto-start-vpn.nix
|
||||||
../../home/programs/ghostty
|
../../home/programs/ghostty
|
||||||
@@ -10,12 +10,12 @@
|
|||||||
../../home/programs/git
|
../../home/programs/git
|
||||||
../../home/programs/git/lazygit.nix
|
../../home/programs/git/lazygit.nix
|
||||||
../../home/programs/git/signing.nix # CHANGEME: Change the key or remove this file
|
../../home/programs/git/signing.nix # CHANGEME: Change the key or remove this file
|
||||||
../../home/programs/spicetify
|
|
||||||
../../home/programs/thunar
|
../../home/programs/thunar
|
||||||
../../home/programs/nixy
|
../../home/programs/nixy
|
||||||
../../home/programs/nightshift
|
../../home/programs/nightshift
|
||||||
../../home/programs/qutebrowser
|
|
||||||
../../home/programs/nix-utils
|
../../home/programs/nix-utils
|
||||||
|
../../home/programs/spotatui
|
||||||
|
../../home/programs/yazi
|
||||||
|
|
||||||
../../home/programs/group/basic-apps.nix
|
../../home/programs/group/basic-apps.nix
|
||||||
../../home/programs/group/cybersecurity.nix
|
../../home/programs/group/cybersecurity.nix
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
# Choose your theme here:
|
# Choose your theme here:
|
||||||
../../themes/darkviolet.nix
|
../../themes/nixy.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
config.var = {
|
config.var = {
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
keyboardLayout = "fr";
|
keyboardLayout = "fr";
|
||||||
|
|
||||||
location = "Paris";
|
|
||||||
timeZone = "Europe/Paris";
|
timeZone = "Europe/Paris";
|
||||||
defaultLocale = "en_US.UTF-8";
|
defaultLocale = "en_US.UTF-8";
|
||||||
extraLocale = "fr_FR.UTF-8";
|
extraLocale = "fr_FR.UTF-8";
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ nixpkgs.lib.nixosSystem {
|
|||||||
inputs.stylix.nixosModules.stylix
|
inputs.stylix.nixosModules.stylix
|
||||||
inputs.sops-nix.nixosModules.sops
|
inputs.sops-nix.nixosModules.sops
|
||||||
inputs.nixarr.nixosModules.default
|
inputs.nixarr.nixosModules.default
|
||||||
# inputs.eleakxir.nixosModules.eleakxir
|
|
||||||
inputs.nix-index-database.nixosModules.default
|
inputs.nix-index-database.nixosModules.default
|
||||||
inputs.default-creds.nixosModules.default
|
inputs.default-creds.nixosModules.default
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
../../home/programs/git/lazygit.nix
|
../../home/programs/git/lazygit.nix
|
||||||
../../home/programs/nixy
|
../../home/programs/nixy
|
||||||
../../home/programs/nix-utils
|
../../home/programs/nix-utils
|
||||||
|
../../home/programs/yazi
|
||||||
|
|
||||||
../../home/programs/group/dev.nix
|
../../home/programs/group/dev.nix
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
# Choose your theme here:
|
# Choose your theme here:
|
||||||
../../themes/rose-pine.nix
|
../../themes/nixy.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
config.var = {
|
config.var = {
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
keyboardLayout = "fr";
|
keyboardLayout = "fr";
|
||||||
|
|
||||||
location = "Paris";
|
|
||||||
timeZone = "Europe/Paris";
|
timeZone = "Europe/Paris";
|
||||||
defaultLocale = "en_US.UTF-8";
|
defaultLocale = "en_US.UTF-8";
|
||||||
extraLocale = "fr_FR.UTF-8";
|
extraLocale = "fr_FR.UTF-8";
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
{
|
{config, ...}: {
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
imports = [
|
||||||
# Mostly system related configuration
|
# Mostly system related configuration
|
||||||
../../nixos/audio.nix
|
../../nixos/audio.nix
|
||||||
@@ -11,11 +7,12 @@
|
|||||||
../../nixos/home-manager.nix
|
../../nixos/home-manager.nix
|
||||||
../../nixos/nix.nix
|
../../nixos/nix.nix
|
||||||
../../nixos/systemd-boot.nix
|
../../nixos/systemd-boot.nix
|
||||||
../../nixos/sddm.nix
|
../../nixos/tuigreet.nix
|
||||||
../../nixos/usbguard.nix
|
../../nixos/usbguard.nix
|
||||||
../../nixos/users.nix
|
../../nixos/users.nix
|
||||||
../../nixos/utils.nix
|
../../nixos/utils.nix
|
||||||
../../nixos/hyprland.nix
|
../../nixos/hyprland.nix
|
||||||
|
../../home/programs/helium/system.nix # I hate browser's configuration..
|
||||||
|
|
||||||
# You should let those lines as is
|
# You should let those lines as is
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
@@ -34,6 +31,7 @@
|
|||||||
allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" hash "prM+Jby/bFHCn2lNjQdAMbgc6tse3xVx+hZwjOPHSdQ=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type ""
|
allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" hash "prM+Jby/bFHCn2lNjQdAMbgc6tse3xVx+hZwjOPHSdQ=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type ""
|
||||||
allow id 17ef:608d serial "" name "Lenovo USB Optical Mouse" hash "klpDZuv1jhWGNqZLOl+KXF+75Ir3PfBm6D6ncjoLRBU=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-7" with-interface 03:01:02 with-connect-type "hotplug"
|
allow id 17ef:608d serial "" name "Lenovo USB Optical Mouse" hash "klpDZuv1jhWGNqZLOl+KXF+75Ir3PfBm6D6ncjoLRBU=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-7" with-interface 03:01:02 with-connect-type "hotplug"
|
||||||
allow id 17ef:6190 serial "" name "Lenovo Calliope USB Keyboard G2" hash "CfZ9R/aoXGm7BN/ojVEzKQwVoxCUtRWMuACrE7BL/5Y=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-10" with-interface { 03:01:01 03:00:00 } with-connect-type "hotplug"
|
allow id 17ef:6190 serial "" name "Lenovo Calliope USB Keyboard G2" hash "CfZ9R/aoXGm7BN/ojVEzKQwVoxCUtRWMuACrE7BL/5Y=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-10" with-interface { 03:01:01 03:00:00 } with-connect-type "hotplug"
|
||||||
|
allow id 0781:5581 name " SanDisk 3.2Gen1"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [9001];
|
networking.firewall.allowedTCPPorts = [9001];
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ nixpkgs.lib.nixosSystem {
|
|||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
inputs.stylix.nixosModules.stylix
|
inputs.stylix.nixosModules.stylix
|
||||||
inputs.nix-index-database.nixosModules.default
|
inputs.nix-index-database.nixosModules.default
|
||||||
|
inputs.helium-browser.nixosModules.default
|
||||||
./configuration.nix
|
./configuration.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -1,19 +1,19 @@
|
|||||||
{config, ...}: {
|
{config, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
# Programs
|
# Programs
|
||||||
../../home/programs/brave
|
|
||||||
../../home/programs/proton
|
../../home/programs/proton
|
||||||
|
../../home/programs/helium
|
||||||
../../home/programs/ghostty
|
../../home/programs/ghostty
|
||||||
../../home/programs/nvf
|
../../home/programs/nvf
|
||||||
../../home/programs/shell
|
../../home/programs/shell
|
||||||
../../home/programs/git
|
../../home/programs/git
|
||||||
../../home/programs/git/lazygit.nix
|
../../home/programs/git/lazygit.nix
|
||||||
../../home/programs/spicetify
|
|
||||||
../../home/programs/thunar
|
../../home/programs/thunar
|
||||||
../../home/programs/nixy
|
../../home/programs/nixy
|
||||||
../../home/programs/nightshift
|
../../home/programs/nightshift
|
||||||
../../home/programs/qutebrowser
|
|
||||||
../../home/programs/nix-utils
|
../../home/programs/nix-utils
|
||||||
|
../../home/programs/spotatui
|
||||||
|
../../home/programs/yazi
|
||||||
|
|
||||||
../../home/programs/group/basic-apps.nix
|
../../home/programs/group/basic-apps.nix
|
||||||
../../home/programs/group/cybersecurity.nix
|
../../home/programs/group/cybersecurity.nix
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
}: {
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
# Choose your theme here:
|
# Choose your theme here:
|
||||||
../../themes/darkviolet.nix
|
../../themes/nixy.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
config.var = {
|
config.var = {
|
||||||
@@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
keyboardLayout = "fr";
|
keyboardLayout = "fr";
|
||||||
|
|
||||||
location = "Paris";
|
|
||||||
timeZone = "Europe/Paris";
|
timeZone = "Europe/Paris";
|
||||||
defaultLocale = "en_US.UTF-8";
|
defaultLocale = "en_US.UTF-8";
|
||||||
extraLocale = "fr_FR.UTF-8";
|
extraLocale = "fr_FR.UTF-8";
|
||||||
|
|||||||
+2
-2
@@ -1,5 +1,5 @@
|
|||||||
# Docker is a containerization platform that allows you to run applications in isolated environments called containers.
|
{config, pkgs, ...}: {
|
||||||
{config, ...}: {
|
|
||||||
virtualisation.docker.enable = true;
|
virtualisation.docker.enable = true;
|
||||||
|
virtualisation.docker.package = pkgs.docker_29;
|
||||||
users.users."${config.var.username}".extraGroups = ["docker"];
|
users.users."${config.var.username}".extraGroups = ["docker"];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
system = pkgs.stdenv.hostPlatform.system;
|
system = pkgs.stdenv.hostPlatform.system;
|
||||||
config.allowUnfree = true;
|
config.allowUnfree = true;
|
||||||
};
|
};
|
||||||
|
pkgs-nur-hadi = inputs.nur-anotherhadi.packages.${pkgs.stdenv.hostPlatform.system};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
# SDDM is a display manager for X11 and Wayland
|
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
foreground = config.theme.textColorOnWallpaper;
|
|
||||||
sddm-astronaut = pkgs.sddm-astronaut.override {
|
|
||||||
embeddedTheme = "pixel_sakura";
|
|
||||||
themeConfig = {
|
|
||||||
HeaderTextColor = "#${foreground}";
|
|
||||||
DateTextColor = "#${foreground}";
|
|
||||||
TimeTextColor = "#${foreground}";
|
|
||||||
LoginFieldTextColor = "#${foreground}";
|
|
||||||
PasswordFieldTextColor = "#${foreground}";
|
|
||||||
UserIconColor = "#${foreground}";
|
|
||||||
PasswordIconColor = "#${foreground}";
|
|
||||||
WarningColor = "#${foreground}";
|
|
||||||
LoginButtonBackgroundColor = "#${foreground}";
|
|
||||||
SystemButtonsIconsColor = "#${foreground}";
|
|
||||||
SessionButtonTextColor = "#${foreground}";
|
|
||||||
VirtualKeyboardButtonTextColor = "#${foreground}";
|
|
||||||
DropdownBackgroundColor = "#${foreground}";
|
|
||||||
HighlightBackgroundColor = "#${foreground}";
|
|
||||||
Background =
|
|
||||||
if "sakura_pixelart_light_static.png" == config.stylix.image
|
|
||||||
then
|
|
||||||
pkgs.fetchurl {
|
|
||||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/sakura_pixelart_light_animated.gif";
|
|
||||||
sha256 = "sha256-qySDskjmFYt+ncslpbz0BfXiWm4hmFf5GPWF2NlTVB8=";
|
|
||||||
}
|
|
||||||
else if "cat-watching-the-star_pixelart_purple_static.png" == config.stylix.image
|
|
||||||
then
|
|
||||||
pkgs.fetchurl {
|
|
||||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/cat-watching-the-star_pixelart_purple_animated.gif";
|
|
||||||
sha256 = "";
|
|
||||||
}
|
|
||||||
else "${toString config.stylix.image}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
services.displayManager = {
|
|
||||||
sddm = {
|
|
||||||
package = pkgs.kdePackages.sddm;
|
|
||||||
extraPackages = [sddm-astronaut];
|
|
||||||
enable = true;
|
|
||||||
wayland.enable = true;
|
|
||||||
theme = "sddm-astronaut-theme";
|
|
||||||
settings = {
|
|
||||||
Wayland.SessionDir = "${
|
|
||||||
inputs.hyprland.packages."${pkgs.stdenv.hostPlatform.system}".hyprland
|
|
||||||
}/share/wayland-sessions";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = [sddm-astronaut];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
c = config.lib.stylix.colors;
|
||||||
|
tuigreet = inputs.notashelf-tuigreet.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
||||||
|
|
||||||
|
theme = lib.concatStringsSep ";" [
|
||||||
|
"border=#${c.base0D}"
|
||||||
|
"text=#${c.base05}"
|
||||||
|
"prompt=#${c.base0D}"
|
||||||
|
"action=#${c.base0C}"
|
||||||
|
"button=#${c.base0D}"
|
||||||
|
"container=#${c.base00}"
|
||||||
|
"input=#${c.base02}"
|
||||||
|
];
|
||||||
|
|
||||||
|
tuigreet-launch = pkgs.writeShellScript "tuigreet-launch" ''
|
||||||
|
exec ${tuigreet}/bin/tuigreet \
|
||||||
|
--time \
|
||||||
|
--time-format '%H:%M %A %d %B' \
|
||||||
|
--sessions /run/current-system/sw/share/wayland-sessions \
|
||||||
|
--remember \
|
||||||
|
--remember-user-session \
|
||||||
|
--asterisks \
|
||||||
|
--greeting 'Welcome' \
|
||||||
|
--container-padding 2 \
|
||||||
|
--theme '${theme}' \
|
||||||
|
--power-shutdown 'systemctl poweroff' \
|
||||||
|
--power-reboot 'systemctl reboot'
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
services.greetd = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
default_session = {
|
||||||
|
command = "${tuigreet-launch}";
|
||||||
|
user = "greeter";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# this is a life saver.
|
||||||
|
# literally no documentation about this anywhere.
|
||||||
|
# might be good to write about this...
|
||||||
|
# https://www.reddit.com/r/NixOS/comments/u0cdpi/tuigreet_with_xmonad_how/
|
||||||
|
systemd.services.greetd.serviceConfig = {
|
||||||
|
Type = "idle";
|
||||||
|
StandardInput = "tty";
|
||||||
|
StandardOutput = "tty";
|
||||||
|
StandardError = "journal"; # Without this errors will spam on screen
|
||||||
|
# Without these bootlogs will spam on screen
|
||||||
|
TTYReset = true;
|
||||||
|
TTYVHangup = true;
|
||||||
|
TTYVTDisallocate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [tuigreet];
|
||||||
|
}
|
||||||
@@ -33,6 +33,11 @@ in {
|
|||||||
timeZone = timeZone;
|
timeZone = timeZone;
|
||||||
};
|
};
|
||||||
i18n.defaultLocale = defaultLocale;
|
i18n.defaultLocale = defaultLocale;
|
||||||
|
i18n.inputMethod = {
|
||||||
|
enable = true;
|
||||||
|
type = "fcitx5";
|
||||||
|
fcitx5.addons = with pkgs; [fcitx5-gtk];
|
||||||
|
};
|
||||||
i18n.extraLocaleSettings = {
|
i18n.extraLocaleSettings = {
|
||||||
LC_ADDRESS = extraLocale;
|
LC_ADDRESS = extraLocale;
|
||||||
LC_IDENTIFICATION = extraLocale;
|
LC_IDENTIFICATION = extraLocale;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ in {
|
|||||||
services.nginx = {
|
services.nginx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
virtualHosts."wallpapers" = {
|
virtualHosts."wallpapers" = {
|
||||||
root = "${inputs.awesome-wallpapers.packages.${pkgs.system}.default}/share/awesome-wallpapers";
|
root = "${inputs.awesome-wallpapers.packages.${pkgs.stdenv.hostPlatform.system}.default}/share/awesome-wallpapers";
|
||||||
listen = [
|
listen = [
|
||||||
{
|
{
|
||||||
addr = "0.0.0.0";
|
addr = "0.0.0.0";
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ in {
|
|||||||
enable = true;
|
enable = true;
|
||||||
virtualHosts = {
|
virtualHosts = {
|
||||||
"blog" = {
|
"blog" = {
|
||||||
root = "${inputs.blog.packages.${pkgs.system}.default}/share/blog";
|
root = "${inputs.blog.packages.${pkgs.stdenv.hostPlatform.system}.default}/share/blog";
|
||||||
listen = [
|
listen = [
|
||||||
{
|
{
|
||||||
addr = "0.0.0.0";
|
addr = "0.0.0.0";
|
||||||
|
|||||||
@@ -7,16 +7,17 @@
|
|||||||
options.theme = lib.mkOption {
|
options.theme = lib.mkOption {
|
||||||
type = lib.types.attrs;
|
type = lib.types.attrs;
|
||||||
default = {
|
default = {
|
||||||
rounding = 25;
|
rounding = 20;
|
||||||
gaps-in = 10;
|
bar-rounding = 20 + 10;
|
||||||
gaps-out = 10 * 2;
|
bar-thickness = 0;
|
||||||
active-opacity = 0.99;
|
gaps-in = 8;
|
||||||
inactive-opacity = 0.97;
|
gaps-out = 8 * 2;
|
||||||
|
active-opacity = 0.96;
|
||||||
|
inactive-opacity = 0.92;
|
||||||
blur = true;
|
blur = true;
|
||||||
border-size = 2;
|
border-size = 2;
|
||||||
animation-speed = "medium"; # "fast" | "medium" | "slow"
|
animation-speed = "medium"; # "fast" | "medium" | "slow"
|
||||||
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
||||||
textColorOnWallpaper = config.lib.stylix.colors.base00; # Color of the text displayed on the wallpaper (Lockscreen, display manager, ...)
|
|
||||||
};
|
};
|
||||||
description = "Theme configuration options";
|
description = "Theme configuration options";
|
||||||
};
|
};
|
||||||
@@ -26,8 +27,8 @@
|
|||||||
|
|
||||||
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
||||||
base16Scheme = {
|
base16Scheme = {
|
||||||
base00 = "110F12"; # Default Background
|
base00 = "0A0A0C"; # Default Background
|
||||||
base01 = "1C1920"; # Lighter Background (Used for status bars, line number and folding marks)
|
base01 = "110F12"; # Lighter Background (Used for status bars, line number and folding marks)
|
||||||
base02 = "2D2A36"; # Selection Background
|
base02 = "2D2A36"; # Selection Background
|
||||||
base03 = "514D63"; # Comments, Invisibles, Line Highlighting
|
base03 = "514D63"; # Comments, Invisibles, Line Highlighting
|
||||||
base04 = "8E8AA0"; # Dark Foreground (Used for status bars)
|
base04 = "8E8AA0"; # Dark Foreground (Used for status bars)
|
||||||
@@ -74,8 +75,8 @@
|
|||||||
|
|
||||||
polarity = "dark";
|
polarity = "dark";
|
||||||
image = pkgs.fetchurl {
|
image = pkgs.fetchurl {
|
||||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/white-snow-and-a-tree_light.png";
|
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/black-moutains-and-a-city.png";
|
||||||
sha256 = "sha256-HKqDY/iCcV++WwNuNIWZEyXuxYuGWG+krn2vPTe58HQ=";
|
sha256 = "sha256-RTTA3Lf+hnPpo9hwS075kbnIouz12ul2GKO3EIgP6AU=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.theme = lib.mkOption {
|
|
||||||
type = lib.types.attrs;
|
|
||||||
default = {
|
|
||||||
rounding = 30;
|
|
||||||
gaps-in = 12;
|
|
||||||
gaps-out = 12 * 2;
|
|
||||||
active-opacity = 0.96;
|
|
||||||
inactive-opacity = 0.94;
|
|
||||||
blur = true;
|
|
||||||
border-size = 4;
|
|
||||||
animation-speed = "fast"; # "fast" | "medium" | "slow"
|
|
||||||
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
|
||||||
textColorOnWallpaper = config.lib.stylix.colors.base00; # Color of the text displayed on the wallpaper (Lockscreen, display manager, ...)
|
|
||||||
};
|
|
||||||
description = "Theme configuration options";
|
|
||||||
};
|
|
||||||
|
|
||||||
config.stylix = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
|
||||||
base16Scheme = {
|
|
||||||
base00 = "151320"; # Default Background
|
|
||||||
base01 = "1f1d2e"; # Lighter Background (Used for status bars, line number and folding marks)
|
|
||||||
base02 = "26233a"; # Selection Background
|
|
||||||
base03 = "6e6a86"; # Comments, Invisibles, Line Highlighting
|
|
||||||
base04 = "908caa"; # Dark Foreground (Used for status bars)
|
|
||||||
base05 = "e0def4"; # Default Foreground, Caret, Delimiters, Operators
|
|
||||||
base06 = "e0def4"; # Light Foreground (Not often used)
|
|
||||||
base07 = "524f67"; # Light Background (Not often used)
|
|
||||||
base08 = "eb6f92"; # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
|
|
||||||
base09 = "f6c177"; # Integers, Boolean, Constants, XML Attributes, Markup Link Url
|
|
||||||
base0A = "ebbcba"; # Classes, Markup Bold, Search Text Background
|
|
||||||
base0B = "31748f"; # Strings, Inherited Class, Markup Code, Diff Inserted
|
|
||||||
base0C = "9ccfd8"; # Support, Regular Expressions, Escape Characters, Markup Quotes
|
|
||||||
base0D = "c4a7e7"; # Functions, Methods, Attribute IDs, Headings, Accent color
|
|
||||||
base0E = "f6c177"; # Keywords, Storage, Selector, Markup Italic, Diff Changed
|
|
||||||
base0F = "524f67"; # Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?>
|
|
||||||
};
|
|
||||||
|
|
||||||
cursor = {
|
|
||||||
name = "BreezeX-RosePine-Linux";
|
|
||||||
package = pkgs.rose-pine-cursor;
|
|
||||||
size = 20;
|
|
||||||
};
|
|
||||||
|
|
||||||
fonts = {
|
|
||||||
monospace = {
|
|
||||||
package = pkgs.maple-mono.NF;
|
|
||||||
name = "Maple Mono NF";
|
|
||||||
};
|
|
||||||
sansSerif = {
|
|
||||||
package = pkgs.source-sans-pro;
|
|
||||||
name = "Source Sans Pro";
|
|
||||||
};
|
|
||||||
serif = config.stylix.fonts.sansSerif;
|
|
||||||
emoji = {
|
|
||||||
package = pkgs.noto-fonts-color-emoji;
|
|
||||||
name = "Noto Color Emoji";
|
|
||||||
};
|
|
||||||
sizes = {
|
|
||||||
applications = 13;
|
|
||||||
desktop = 13;
|
|
||||||
popups = 13;
|
|
||||||
terminal = 13;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
polarity = "dark";
|
|
||||||
image = pkgs.fetchurl {
|
|
||||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/pink-clouds.png";
|
|
||||||
sha256 = "sha256-IvINf62mg9rKjml4sh8hl/j7UHrQQlbm6QnZTaI+TRk=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.theme = lib.mkOption {
|
|
||||||
type = lib.types.attrs;
|
|
||||||
default = {
|
|
||||||
rounding = 30;
|
|
||||||
gaps-in = 12;
|
|
||||||
gaps-out = 12 * 2;
|
|
||||||
active-opacity = 0.99;
|
|
||||||
inactive-opacity = 0.98;
|
|
||||||
blur = false;
|
|
||||||
border-size = 4;
|
|
||||||
animation-speed = "medium"; # "fast" | "medium" | "slow"
|
|
||||||
fetch = "none"; # "nerdfetch" | "neofetch" | "pfetch" | "none"
|
|
||||||
textColorOnWallpaper = config.lib.stylix.colors.base00; # Color of the text displayed on the wallpaper (Lockscreen, display manager, ...)
|
|
||||||
};
|
|
||||||
description = "Theme configuration options";
|
|
||||||
};
|
|
||||||
|
|
||||||
config.stylix = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# See https://tinted-theming.github.io/tinted-gallery/ for more schemes
|
|
||||||
base16Scheme = {
|
|
||||||
base00 = "090E13"; # Default Background
|
|
||||||
base01 = "12171E"; # Lighter Background (Used for status bars, line number and folding marks)
|
|
||||||
base02 = "393B44"; # Selection Background
|
|
||||||
base03 = "54546D"; # Comments, Invisibles, Line Highlighting
|
|
||||||
base04 = "A4A7A4"; # Dark Foreground (Used for status bars)
|
|
||||||
base05 = "C5C9C7"; # Default Foreground, Caret, Delimiters, Operators
|
|
||||||
base06 = "DCD7BA"; # Light Foreground (Not often used)
|
|
||||||
base07 = "C8C093"; # Light Background (Not often used)
|
|
||||||
base08 = "C4746E"; # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
|
|
||||||
base09 = "B6927B"; # Integers, Boolean, Constants, XML Attributes, Markup Link Url
|
|
||||||
base0A = "C4B28A"; # Classes, Markup Bold, Search Text Background
|
|
||||||
base0B = "8A9A7B"; # Strings, Inherited Class, Markup Code, Diff Inserted
|
|
||||||
base0C = "8EA4A2"; # Support, Regular Expressions, Escape Characters, Markup Quotes
|
|
||||||
base0D = "8BA4B0"; # Functions, Methods, Attribute IDs, Headings, Accent color
|
|
||||||
base0E = "A292A3"; # Keywords, Storage, Selector, Markup Italic, Diff Changed
|
|
||||||
base0F = "B98D7B"; # Deprecated, Opening/Closing Embedded Language Tags, e.g. <?php ?>
|
|
||||||
};
|
|
||||||
|
|
||||||
cursor = {
|
|
||||||
name = "BreezeX-RosePine-Linux";
|
|
||||||
package = pkgs.rose-pine-cursor;
|
|
||||||
size = 20;
|
|
||||||
};
|
|
||||||
|
|
||||||
fonts = {
|
|
||||||
monospace = {
|
|
||||||
package = pkgs.maple-mono.NF;
|
|
||||||
name = "Maple Mono NF";
|
|
||||||
};
|
|
||||||
sansSerif = {
|
|
||||||
package = pkgs.source-sans-pro;
|
|
||||||
name = "Source Sans Pro";
|
|
||||||
};
|
|
||||||
serif = config.stylix.fonts.sansSerif;
|
|
||||||
emoji = {
|
|
||||||
package = pkgs.noto-fonts-color-emoji;
|
|
||||||
name = "Noto Color Emoji";
|
|
||||||
};
|
|
||||||
sizes = {
|
|
||||||
applications = 13;
|
|
||||||
desktop = 13;
|
|
||||||
popups = 13;
|
|
||||||
terminal = 13;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
polarity = "dark";
|
|
||||||
image = pkgs.fetchurl {
|
|
||||||
url = "https://raw.githubusercontent.com/anotherhadi/awesome-wallpapers/refs/heads/main/app/static/wallpapers/nepal.png";
|
|
||||||
sha256 = "sha256-0o2+B3+yA++PCyfNC+VqmaX959aKk3GuD7XpOq3SGcM=";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user