1
0
Fork 0
mirror of https://git.sr.ht/~neverness/ultima synced 2025-04-21 21:38:39 +00:00

new beginning

This commit is contained in:
neverness 2025-01-04 11:34:58 +09:00
commit c48057b486
167 changed files with 13045 additions and 0 deletions

24
LICENSE Normal file
View file

@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <https://unlicense.org>

115
README.md Normal file
View file

@ -0,0 +1,115 @@
<div align="center"> <h1>❄️【 NIXOS DOTFILES 】❄️</h1> </div>
### GUIDE FOR CREATE OWN MACHINE & HOME
1. Create directory with your _hostName_ in _flakeDir_
- _flakeDir_ is flake root (example: **/persist/flake/** )
2. Create _default.nix_ in ~/_flakeDir_/_hostName_/ (example: **~/flakeDir/hostName/default.nix** )
- Fill it with:
```nix
{ inputs, lib, ... }:
{
flake = import ../libx/builder.nix { # default values watch in ~/flakeDir/libx/builder.nix
inherit inputs lib;
disk = "..."; # your disk in /dev/disk/by-uuid/*
# VARIABLES
hostName = "pantheon"; # hostName is ~/flakeDir/hostName
userName = "arthemida"; # userName
flakeDir = "/persist/flake"; # flakeDir
is = "desktop"; # for laptop | desktop | server
# CUSTOMIZE
theme = "chanivibes"; # from inputs.design.base16
image = "default"; # from inputs.design.wallpapers
# SYS INFA
plfrm = "x86_64-linux"; # your architecture
ver = "24.05"; # stateVersion in below /etc/nixos/configuration.nix
# DEVICES
dev = { # other mountable disks
SSD1 = "/mnt/games";
HDD1 = "/mnt/prono_idk";
SSD2 = "/mnt/howii";
};
};
}
```
<details>
<summary>Software</summary>
| Category (name + url) | Desciption |
| -----------------------------------------------------------------: | ------------------------------------------------ |
| Window managers | |
| [hyprland](https://github.com/hyprwm/hyprland) | Best window manager |
| [kitty](https://github.com/kovidgoyal/kitty) | Very good terminal with image preview |
| [grimblast](https://github.com/hyprwm/contrib/tree/main/grimblast) | Screenshoter |
| [nwg-drawer](https://github.com/nwg-piotr/nwg-drawer) | Gnome-like launcher |
| [waybar](https://github.com/Alexays/Waybar) | Bar for wayland compositors |
| CLI utilites | |
| [fish](https://github.com/fish-shell/fish-shell) | Just working shell |
| [fastfetch](https://github.com/fastfetch-cli/fastfetch) | Fetch for be cool rices |
| [yazi](https://github.com/sxyazi/yazi) | Rusted file-manager great!!! |
| [helix](https://github.com/helix-editor/helix) | Best text editor with vi-like keys |
| [cava](https://github.com/karlstav/cava) | Sound visualizer |
| [rustmission](https://github.com/intuis/rustmission) | TUI for Transmission |
| [eza](https://github.com/eza-community/eza) | Rusted ls with icons |
| [lsd](https://github.com/lsd-rs/lsd) | Rusted ls with icons (idk another?) |
| [lutgen](https://github.com/ozwaldorf/lutgen-rs) | Rusted lut |
| [jpegoptim](https://github.com/tjko/jpegoptim) | Low size for jpeg |
| [optipng](https://optipng.sourceforge.net) | Low size for png |
| [nvtop](https://github.com/Syllo/nvtop) | Top for GPU |
| [btop](https://github.com/aristocratos/btop) | Very informated top |
| [trashy](https://github.com/oberblastmeister/trashy) | Trash manager |
| [fuc](https://github.com/SUPERCILEX/fuc) | Rusted cp and rm commands |
| [sudo-rs](https://github.com/trifectatechfoundation/sudo-rs) | Fast and secure sudo |
| GUI utilites | |
| [zen](https://github.com/zen-browser/desktop) | Stylish and modern ForryFox (best my opinion) |
| [floorp](https://github.com/Floorp-Projects/Floorp) | One of best browser on FurryFox |
| [qutebrowser](https://qutebrowser.org/) | Cool browser with vi keys |
| [nemo](https://github.com/linuxmint/nemo) | File manager from Cinnamon |
| [onlyoffice](https://github.com/ONLYOFFICE/DesktopEditors) | Office suite |
| [vesktop](https://github.com/Vencord/Vesktop) | Wayland Discord client |
| [qbittorrent](https://github.com/qbittorrent/qBittorrent) | Torrents))))) hahah)))) |
| [64gram](https://github.com/TDesktop-x64/tdesktop) | IDK just modified tgram client lol |
| [ayugram](https://github.com/AyuGram/AyuGramDesktop) | Telegram client with ghost mode |
| [file-Roller](https://gitlab.gnome.org/GNOME/file-roller) | Archiver |
| [filezilla](https://filezilla-project.org) | Good FTP client |
| [mpv](https://github.com/mpv-player/mpv) | Simplest video player |
| [anime4k](https://github.com/bloc97/Anime4K) | Anime upscaler |
| [swayimg](https://github.com/artemsen/swayimg) | Simple image viewer |
| Games | |
| [mindustry](https://github.com/Anuken/Mindustry) | OHMYGOD 10/10 RTS YEEEE BOYYYY |
| [bottles](https://github.com/bottlesdevs/Bottles) | Wine launcher with multiple prefixes |
| [prismlauncher](https://github.com/PrismLauncher/PrismLauncher) | Fuckm all my homies plays this shit man |
| [steam](https://store.steampowered.com) | Cool game store and launcher |
| [legendary](https://github.com/derrod/legendary) | CLI for Epic Games Store |
| [protonup](https://github.com/DavidoTek/ProtonUp-Qt) | Provides Proton-GE/Wine-GE for Steam and Bottles |
| [proton-ge](https://github.com/GloriousEggroll/proton-ge-custom) | GE(idk what that mean) version of Valve Proton |
| Misc | |
| [nix-tree](https://github.com/utdemir/nix-tree) | Tree for your generations&derivations |
| [nurl](https://github.com/nix-community/nurl) | Tool for fetching git repo |
| [tenki](https://github.com/ckaznable/tenki) | TUI clock with effects |
| [confetty](https://github.com/maaslalani/confetty) | Confetty and fireworks in terminal |
| [jetbrains](https://github.com/ryanoasis/nerd-fonts) | Nerded fonts |
- IDK WHAT ALSO DUDES
</details>
### PREVIEW
![aye](https://git.sr.ht/~neverness/design/blob/main/dotfiles/workst/fetch.jpeg)
![ауе](https://git.sr.ht/~neverness/design/blob/main/dotfiles/workst/spotify.jpeg)
![ауе](https://git.sr.ht/~neverness/design/blob/main/dotfiles/workst/top.jpeg)
![ауе](https://git.sr.ht/~neverness/design/blob/main/dotfiles/workst/yazi.jpeg)
![ауе](https://git.sr.ht/~neverness/design/blob/main/dotfiles/workst/adam_yeee_father.jpeg)
#### ENGLISH OR SPANISH??? WHOEVER MOVES IS GAY)))))))
#### THANKS FOR [hezaki](https://codeberg.org/Hezaki/Touka/), [maxmurr](https://github.com/TheMaxMur/NixOS-Configuration), [artem](https://github.com/ArtemChandragupta/NixFlake)

1305
flake.lock generated Normal file

File diff suppressed because it is too large Load diff

63
flake.nix Normal file
View file

@ -0,0 +1,63 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # UNSTABLE
nur.url = "github:nix-community/NUR"; # NUR
impermanence.url = "github:nix-community/impermanence"; # IMPERA
hardware.url = "github:NixOS/nixos-hardware/master"; # HARDWARE
parts.url = "github:hercules-ci/flake-parts"; # PARTS
gaming.url = "github:fufexan/nix-gaming"; # GAMING
transg.url = "github:PanAeon/transg-tui"; # TRANSG
hyprland.url = "github:hyprwm/Hyprland"; # HYPRLAND
stylix.url = "github:danth/stylix"; # STYLIX
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
}; # HM
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
}; # DECLARATIVE DISK PART
nypkgs = {
url = "github:yunfachi/nypkgs";
inputs.nixpkgs.follows = "nixpkgs";
}; # ONLY FOR UMPORT
zen = {
url = "github:0xc000022070/zen-browser-flake";
inputs.nixpkgs.follows = "nixpkgs";
}; # COOL BROWSER
spicetify = {
url = "github:Gerg-L/spicetify-nix";
inputs.nixpkgs.follows = "nixpkgs";
}; # SPOTIFY
ytcli = {
url = "github:Benexl/yt-x";
inputs.nixpkgs.follows = "nixpkgs";
}; # TUI YOUTUBE
firefox-addons = {
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
inputs.nixpkgs.follows = "nixpkgs";
}; # FIREFOX
cursors = {
url = "github:LilleAila/nix-cursors";
inputs.nixpkgs.follows = "nixpkgs";
}; # COLORIZE CUSRSOR
design = {
url = "sourcehut:~neverness/design?ref=main";
flake = false;
}; # DISIGNING REPO
};
outputs =
inputs:
inputs.parts.lib.mkFlake { inherit inputs; } {
perSystem =
{ pkgs, ... }:
{
formatter = pkgs.nixfmt-rfc-style;
};
systems = [ "x86_64-linux" ]; # YOUR SYSTEM IDK
imports = [ ./jetpure ]; # YOUR MACHINES
};
}

23
jetpure/default.nix Normal file
View file

@ -0,0 +1,23 @@
{ inputs, lib, ... }:
{
flake = import ../libx/builder.nix {
inherit inputs lib;
disk = "/dev/disk/by-uuid/d8440438-2f95-4854-b139-bf0a3e91a81f";
# variables
hostName = "jetpure";
userName = "nixzoid";
flakeDir = "/persist/flake";
is = "desktop";
# customize
theme = "paradise"; # from inputs.design
image = "train";
# sys info
plfrm = "x86_64-linux";
ver = "24.05";
# ++ devices
dev = {
hdd = "/mnt/HDD";
ssd = "/mnt/SSD";
};
};
}

89
jetpure/home/default.nix Normal file
View file

@ -0,0 +1,89 @@
{ x, config, ... }:
let
inherit (x) True False umport;
in
{
imports = umport {
exclude = [ ./default.nix ];
path = ./.;
};
module = {
programs = {
cli = {
bat = True;
cava = True;
eza = True;
fetch = True;
fzf = True;
git = True;
gpg = True;
helix = True;
joshuto = False;
legendary = True;
lsd = False;
micro = False;
rustmission = True;
top = True;
yazi = True;
zoxide = True;
};
gui = {
floorp = False;
minecraft = True // {
cli = True;
};
mpv = True;
obs = True;
qbittorrent = True;
qutebrowser = True;
spotify = True;
swayimg = True;
zed = False;
};
custom = {
anicli = True;
};
};
shells = {
fish = True;
nushell = False;
tmux = False;
zsh = False;
starship = True;
};
themes = {
gtk = True; # GTK APPS
qt = True; # QT APPS
stylix = True // {
icon = "adwaita";
cursor = with config.lib.stylix.colors.withHashtag; {
bg = "${base0E}";
ol = "${base00}";
ac = "${base0E}";
};
};
};
wm = {
hyprland = True;
sway = False;
terminals = {
kitty = True;
foot = False;
wezterm = False;
};
misc = {
mako = True;
nwg = False;
rofi = False;
tofi = True;
waybar = False;
wob = False;
yofi = False;
};
};
misc = {
dconf = True;
xdg.mime = True;
};
};
}

View file

@ -0,0 +1,5 @@
{
module.shells.abbrs = {
"-h" = "--help";
};
}

View file

@ -0,0 +1,46 @@
{ pkgs, lib, ... }:
{
module.shells.alias.alias =
with pkgs;
let
inherit (lib) getExe;
in
{
# helpful
e = "$EDITOR";
c = "clear";
x = "exit";
# useful
ca = "cava";
cat = "bat";
pmx = "pulsemixer";
blt = "bluetuith";
icat = "kitten icat";
# tops
btop = "btop";
ntop = "nvtop -i";
# clock
ter = "${getExe tenki} --mode rain --wind disable --timer-color cyan -f 80";
tes = "${getExe tenki} --mode snow --wind disable --timer-color yellow -f 80";
tem = "${getExe tenki} --mode meteor --wind disable --timer-color red -f 80";
# gen base16
baseL = "${getExe flavours} generate light --stdout -a=azikx";
baseD = "${getExe flavours} generate dark --stdout -a=azikx";
# vpn
vpn = "openvpn";
# images
imagemagick = "imagemagick";
jpgop = "jpegoptim";
pngop = "optipng";
# lutgen
lut = "${getExe lutgen} apply -p paradise";
lutall = "${getExe lutgen} apply -p paradise ./*";
};
}

View file

@ -0,0 +1,119 @@
{
pkgs,
lib,
config,
...
}:
with lib;
{
module.wm.hyprland = {
autostart = [ "mako" ]; # autostart
binds =
let
c = "--class";
pic = "$(xdg-user-dir PICTURES)/$(date +'scr_%d-%m-%y|%H:%M:%S.png')";
args = "xargs hyprctl dispatch exec --";
# regex
mk =
mod: sub: key: cmd:
"${toString mod} ${toString sub}, ${key}, exec, ${cmd}";
# mod & nomod
mod = (mk "$m");
m = (mod null);
s = (mod "$s");
a = (mod "$a");
in
with pkgs;
[
# menus
(m "$tb" "tofi-drun | ${args}")
# programs
(m "$rt" "kitty")
(s "$rt" "kitty ${c}=termfloat")
(m "V" "telegram-desktop")
(m "B" "zen")
(s "B" "qutebrowser")
(a "B" "floorp")
(m "N" "yazi")
(s "N" "nemo")
(m "M" "spotify")
(s "M" "kitty ${c}=ani anicli-ru -q 1080")
(a "M" "onlyoffice")
(m "Z" "bottles")
(s "Z" "prismlauncher")
(a "Z" "qbittorrent")
# screenshot
(mk null null "$PR" "${getExe grimblast} copysave area ${pic}")
(mk null "$s" "$PR" "${getExe grimblast} copysave output ${pic}")
];
rules =
let
inherit (config.lib.stylix.colors) base0B base01;
# titile & class
cl = win: (mk "class:^(${win})$");
tl = win: (mk "title:^(${win})$");
# regex
mk = type: rule: "${rule}, ${type}";
in
[
(cl "firefox" "workspace 2 silent")
(cl "zen-zen-twilight" "workspace 2 silent")
(cl "zen-alpha" "workspace 2 silent")
(cl "zen-beta" "workspace 2 silent")
(cl "spotify" "workspace 3 silent")
(cl "com.ayugram" "workspace 4 silent")
(cl "io.github.tdesktop_x64.TDesktop" "workspace 4 silent")
(cl "vesktop" "workspace 4 silent")
(cl "obsidian" "workspace 5 silent")
(cl "anicli" "workspace 6 silent")
(cl "org.qbittorrent.qBittorrent" "workspace 9 silent")
# term rules
(cl "termfloat" "float")
(cl "termfloat" "move center")
(cl "termfloat" "size 650 430")
# file manager
(cl "tfm" "float")
(cl "tfm" "move center")
(cl "tfm" "size 800 350")
# gram
(tl "com.ayugram" "minsize 540 680")
(tl "io.github.tdesktop_x64.TDesktop" "minsize 540 680")
(tl "Media viewer" "float")
(tl "Media viewer" "move center")
(tl "Media viewer" "size 670 540")
(tl "Media viewer" "noanim")
(tl "Media viewer" "fullscreen")
(tl "Choose Files" "float")
(tl "Choose Files" "move center")
(tl "Choose Files" "size 650 450")
# (cl "xdg-desktop-portal-gtk" "float")
(cl "xdg-desktop-portal-gtk" "move center")
(cl "xdg-desktop-portal-gtk" "size 807 570")
# (cl "mpv" "nodim")
(cl "ani" "float")
(cl "ani" "size 810 630")
# torrent
(cl "org.qbittorrent.qBittorrent" "float")
(cl "org.qbittorrent.qBittorrent" "size 1020 740")
(cl "org.qbittorrent.qBittorrent" "pseudo")
# pinned
(mk "pinned:1" "bordercolor rgb(${base0B}) rgb(${base01})")
];
};
}

View file

@ -0,0 +1,66 @@
{ pkgs, inputs, ... }:
let
inherit (pkgs) system;
in
{
imports = with inputs; [ nur.modules.homeManager.default ];
module.programs = {
gui.pkgs =
(with pkgs; [
nemo # GUI FM
nemo-fileroller # ADDON
file-roller # ARCHIVER
_64gram # TG GUI
vesktop
onlyoffice-bin # OFFICE
qbittorrent-enhanced # QTORRENT
filezilla # FTP CLIENT
keepassxc # PASSWORDS
popsicle # ISO WRITER
ventoy # FUCK
bottles # LAUNCH GAMES WITHOUT STEAM
mindustry-wayland # MINDUSTRY LETSSS GOOOOO
])
++ (with inputs; [
zen.packages.${system}.twilight # COOL BROWSER
]);
cli.pkgs =
(with pkgs; [
nurl # FETCHER
nix-tree # JUST COOL
btop # CPU RAM AND PROCESSES TOP
nvtopPackages.amd # GPU TOP
atool # ARCHIVER
zip # ZIP ARCHIVER
p7zip-rar # 7ZIP
ouch # ARCHIVE IDK
trashy # TRASH
tenki # CLOCK
imagemagick # CONVERT IMG
jpegoptim # LOW SIZE JPG
optipng # LOW SIZE PNG
lutgen # COLORIZE IMG
wyvern # GOG
tuir # REDDIT TUI
hut # SOURCEHUT INTERACTION
sd # FIND/REPLACE
fuc # RUSTED CP/RM
wineWow64Packages.staging # SIMPLE LAUNCHER
])
++ (with pkgs.nur.repos; [
rycee.mozilla-addons-to-nix # ADDONS TO NIX
])
++ (with inputs; [
ytcli.packages.${system}.default # YTX
]);
};
}

View file

@ -0,0 +1,14 @@
let
m = "Mod4";
X = "exec";
in
{
module.wm.sway = {
programs = {
"${m}+b" = "${X} qutebrowser";
"${m}+v" = "${X} telegram-desktop";
"${m}+n" = "${X} kitty -T Explorer yazi";
"${m}+u" = "${X} onlyoffice-desktopeditors";
};
};
}

77
jetpure/host/default.nix Normal file
View file

@ -0,0 +1,77 @@
{ x, ... }:
let
inherit (x) True False umport;
in
{
imports = umport {
exclude = [ ./default.nix ];
path = ./.;
};
module = {
themes.stylix = True;
base = True;
hardware = {
amd = True // {
amdvlk = False;
};
bluetooth = True;
boot = True // {
plymouth = True;
};
disko = True;
impermanence = False;
network = True;
power = False;
sound = True;
system76 = False;
};
services = {
amneziawg = True // {
service = False;
config = "topor";
};
autocpu = False;
dbus = True;
deluge = False;
getty = True;
gvfs = True;
polkit = True;
printing = False;
tailscale = False;
tlp = False;
transmission = True // {
tui = True;
};
zapret = False;
zram = True // {
algo = "zstd";
};
};
programs = {
common = True;
hamachi = False;
hyprland = True;
steam = True;
sway = False;
torrserver = True;
winapps = True;
};
virt = {
podman = True;
};
misc = {
console = False;
locales = True // {
zone = "Asia/Chita";
};
minimal = True;
protonmail = False;
security = True;
terraria = False;
users = True // {
shell = "fish";
};
variables = True;
};
};
}

View file

@ -0,0 +1,22 @@
{
fileSystems =
let
default = {
fsType = "ext4";
options = [
"nosuid"
"nodev"
"nofail"
"x-gvfs-show"
];
};
in
{
"/mnt/HDD" = default // {
device = "/dev/disk/by-uuid/9290bc08-17fe-47db-a535-d4044b8c8dfb";
};
"/mnt/SSD" = default // {
device = "/dev/disk/by-uuid/e6bc9034-95a4-43bd-b5f5-c7c1743e9f7c";
};
};
}

View file

@ -0,0 +1,8 @@
{ pkgs, ... }:
{
module.programs.common.pkgs = with pkgs; [
helix
killall
openvpn
];
}

63
libx/builder.nix Normal file
View file

@ -0,0 +1,63 @@
{
inputs,
lib,
# variables
disk ? null,
hostName ? "sus",
userName ? "amogus",
flakeDir ? null,
is ? null,
# customize
theme ? "horizon-dark",
image ? "train",
# sys info
plfrm ? "x86_64-linux",
ver ? "24.05",
dev,
...
}:
let
# OTHER
inherit (inputs.nixpkgs.lib) nixosSystem;
inherit (inputs.home-manager.lib) homeManagerConfiguration;
pkgs = inputs.nixpkgs.legacyPackages.${plfrm};
# NEEDS
sec = import ./secrets.nix;
args = { inherit x inputs; };
x = import ./options.nix { inherit inputs pkgs lib; } // {
inherit
# variables
disk
hostName
userName
flakeDir
is
# customize
theme
image
# sys info
plfrm
ver
dev
sec # secrets
;
};
in
# configurations
{
nixosConfigurations.${hostName} = nixosSystem {
modules = [
../modules/nixos
../${hostName}/host
];
specialArgs = args;
};
homeConfigurations.${userName} = homeManagerConfiguration {
modules = [
../modules/home
../${hostName}/home
];
extraSpecialArgs = args;
inherit pkgs;
};
}

65
libx/options.nix Normal file
View file

@ -0,0 +1,65 @@
{
inputs,
pkgs,
lib,
...
}:
let
inherit (pkgs) system;
def = {
default = false;
};
null = {
default = null;
};
setFmt = pkgs.formats.ini { };
in
with lib;
with lib.types;
{
# ylib & stylix
umport = inputs.nypkgs.legacyPackages.${system}.lib.umport;
imports = {
exclude = [ ./default.nix ];
path = ./.;
};
# enable = true; ++ enable = false;
True = {
enable = true;
};
False = {
enable = false;
};
# mkOption and mkEnableOption
mkEnable = mkEnableOption "";
mkBool = mkOption def // {
type = bool;
};
mkOpt = {
str = mkOption def // {
type = str;
};
lines = mkOption null // {
type = nullOr lines;
};
list = {
pkgs = mkOption null // {
type = listOf package;
};
str = mkOption null // {
type = listOf str;
};
};
attrs = {
str = mkOption null // {
type = attrsOf str;
};
};
};
mkConfig = {
ini = mkOption {
type = submodule { freeformType = settingsFormat.type; };
default = { };
};
};
}

6
libx/secrets.nix Normal file
View file

@ -0,0 +1,6 @@
{
git = {
name = "neverness";
email = "of_neverness@vk.com";
};
}

15
modules/home/default.nix Normal file
View file

@ -0,0 +1,15 @@
{ x, ... }:
{
imports = x.umport {
path = ./.;
include = [
./programs/custom/anicli/default.nix
];
exclude = [
./default.nix
./programs/gui/floorp/addons.nix
./themes/stylix/image.nix
./programs/custom
];
};
}

View file

@ -0,0 +1,62 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.misc.dconf;
in
{
options.module.misc.dconf = {
enable = mkBool;
};
config = mkIf cfg.enable {
dconf = True // {
settings =
let
gnome = "org/gnome/desktop";
nemo = "org/nemo";
in
{
"${gnome}/wm/preferences" = {
button-layout = "";
};
"${gnome}/applications/terminal" = {
exec = "kitty";
};
# nemo configuration
"${nemo}/icon-view" = {
default-zoom-level = "larger";
captions = [
"none"
"none"
"none"
];
};
"${nemo}/window-state" = {
network-expanded = false;
start-with-sidebar = true;
start-with-status-bar = false;
start-with-menu-bar = false;
};
"${nemo}/preferences" = {
disable-menu-warning = true;
show-computer-icon-toolbar = true;
show-edit-icon-toolbar = false;
show-home-icon-toolbar = true;
show-icon-view-icon-toolbar = false;
show-list-view-icon-toolbar = false;
show-next-icon-toolbar = false;
show-previous-icon-toolbar = false;
show-search-icon-toolbar = false;
show-up-icon-toolbar = false;
thumbnail-limit = "2147483648";
};
};
};
};
}

View file

@ -0,0 +1,10 @@
{ x, ... }:
with x;
{
programs.home-manager = True;
home = {
username = userName;
homeDirectory = "/home/${userName}";
stateVersion = ver;
};
}

View file

@ -0,0 +1,11 @@
{ x, ... }:
with x;
{
news.display = "silent";
programs.man = False;
manual = {
html = False;
json = False;
manpages = False;
};
}

37
modules/home/misc/nix.nix Normal file
View file

@ -0,0 +1,37 @@
{ x, pkgs, ... }:
with x;
{
nix = {
package = pkgs.nix;
settings = {
warn-dirty = false;
extra-experimental-features = [
"nix-command"
"flakes"
];
trusted-users = [
"${userName}"
"@wheel"
];
extra-substituters = [
"https://nix-gaming.cachix.org" # NIX GAMING
"https://hyprland.cachix.org" # HYPRLAND
"https://cache.garnix.io" # AYUGRAM
];
extra-trusted-public-keys = [
"nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" # NIX GAMING
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" # HYPRLAND
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" # AYUGRAM
];
builders-use-substitutes = true;
auto-optimise-store = true;
};
};
nixpkgs.config.allowUnfree = true;
news.display = "silent";
manual = {
manpages = False;
json = False;
html = False;
};
}

View file

@ -0,0 +1,54 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
hmdir = config.home.homeDirectory;
nD = name: {
name = "${name}";
noDisplay = true;
};
in
{
options.module.misc.xdg = {
mime.enable = mkBool;
};
config = {
xdg = {
mime = True;
portal = True // {
config.common.default = "gtk";
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
xdg-desktop-portal-hyprland
];
};
userDirs = True // {
createDirectories = true;
desktop = "${hmdir}/Desktop";
documents = "${hmdir}/Documents";
download = "${hmdir}/Downloads";
music = "${hmdir}/Music";
pictures = "${hmdir}/Pictures";
publicShare = "${hmdir}/";
templates = "${hmdir}/";
videos = "${hmdir}/Videos";
};
desktopEntries = {
qt5ct = nD "qt5ct";
qt6ct = nD "qt6ct";
nvtop = nD "nvtop";
btop = nD "btop";
fish = nD "fish";
rofi = nD "rofi";
rofi-theme-selector = nD "rofi-theme-selector";
};
};
};
}

View file

@ -0,0 +1,125 @@
{ x, ... }:
with x;
let
ds = "desktop";
in
{
xdg.mimeApps = True // {
defaultApplications =
let
web = "zen";
in
{
# TEXT FORMATS
"text/plain" = "Helix.${ds}";
"text/x-cmake" = "Helix.${ds}";
"text/markdown" = "Helix.${ds}";
"text/rhtml" = "Helix.${ds}";
"text/x-tex" = "Helix.${ds}";
"text/x-java" = "Helix.${ds}";
"text/x-ruby" = "Helix.${ds}";
"inode/x-empty" = "Helix.${ds}";
"text/x-python" = "Helix.${ds}";
"text/x-readme" = "Helix.${ds}";
"text/x-markdown" = "Helix.${ds}";
"application/json" = "Helix.${ds}";
"application/x-ruby" = "Helix.${ds}";
"application/x-yaml" = "Helix.${ds}";
"application/x-shellscript" = "Helix.${ds}";
"application/x-docbook+xml" = "Helix.${ds}";
# IMAGE FORMATS
"image/avif" = "swayimg.${ds}";
"image/gif" = "swayimg.${ds}";
"image/heif" = "swayimg.${ds}";
"image/jpg" = "swayimg.${ds}";
"image/jpeg" = "swayimg.${ds}";
"image/jxl" = "swayimg.${ds}";
"image/png" = "swayimg.${ds}";
"image/bmp" = "swayimg.${ds}";
"image/x-eps" = "swayimg.${ds}";
"image/x-icns" = "swayimg.${ds}";
"image/x-ico" = "swayimg.${ds}";
"image/x-portable-bitmap" = "swayimg.${ds}";
"image/x-portable-graymap" = "swayimg.${ds}";
"image/x-portable-swayimgmap" = "swayimg.${ds}";
"image/x-xbitmap" = "swayimg.${ds}";
"image/x-xswayimgmap" = "swayimg.${ds}";
"image/tiff" = "swayimg.${ds}";
"image/x-psd" = "swayimg.${ds}";
"image/x-webp" = "swayimg.${ds}";
"image/webp" = "swayimg.${ds}";
"image/x-tga" = "swayimg.${ds}";
"image/svg+xml" = "swayimg.${ds}";
# VIDEO FORMATS
"video/3gp" = "mpv.${ds}";
"video/3gpp" = "mpv.${ds}";
"video/3gpp2" = "mpv.${ds}";
"video/avi" = "mpv.${ds}";
"video/divx" = "mpv.${ds}";
"video/dv" = "mpv.${ds}";
"video/fli" = "mpv.${ds}";
"video/flv" = "mpv.${ds}";
"video/mp2t" = "mpv.${ds}";
"video/mp4" = "mpv.${ds}";
"video/mp4v-es" = "mpv.${ds}";
"video/mpeg" = "mpv.${ds}";
"video/msvideo" = "mpv.${ds}";
"video/ogg" = "mpv.${ds}";
"video/quicktime" = "mpv.${ds}";
"video/vnd.divx" = "mpv.${ds}";
"video/vnd.mpegurl" = "mpv.${ds}";
"video/vnd.rn-realvideo" = "mpv.${ds}";
"video/webm" = "mpv.${ds}";
"video/x-avi" = "mpv.${ds}";
"video/x-flv" = "mpv.${ds}";
"video/x-m4v" = "mpv.${ds}";
"video/x-matroska" = "mpv.${ds}";
"video/x-mpeg2" = "mpv.${ds}";
"video/x-ms-asf" = "mpv.${ds}";
"video/x-msvideo" = "mpv.${ds}";
"video/x-ms-wmv" = "mpv.${ds}";
"video/x-ms-wmx" = "mpv.${ds}";
"video/x-ogm" = "mpv.${ds}";
"video/x-ogm+ogg" = "mpv.${ds}";
"video/x-theora" = "mpv.${ds}";
"video/x-theora+ogg" = "mpv.${ds}";
"application/x-matroska" = "mpv.${ds}";
# AUDIO FORMATS
"audio/aac" = "mpv.${ds}";
"audio/mp4" = "mpv.${ds}";
"audio/mpeg" = "mpv.${ds}";
"audio/mpegurl" = "mpv.${ds}";
"audio/ogg" = "mpv.${ds}";
"audio/vnd.rn-realaudio" = "mpv.${ds}";
"audio/vorbis" = "mpv.${ds}";
"audio/x-flac" = "mpv.${ds}";
"audio/x-mp3" = "mpv.${ds}";
"audio/x-mpegurl" = "mpv.${ds}";
"audio/x-ms-wma" = "mpv.${ds}";
"audio/x-musepack" = "mpv.${ds}";
"audio/x-oggflac" = "mpv.${ds}";
"audio/x-pn-realaudio" = "mpv.${ds}";
"audio/x-scpls" = "mpv.${ds}";
"audio/x-speex" = "mpv.${ds}";
"audio/x-vorbis" = "mpv.${ds}";
"audio/x-vorbis+ogg" = "mpv.${ds}";
"audio/x-wav" = "mpv.${ds}";
# WEB
"text/html" = "${web}.${ds}";
"x-scheme-handler/ftp" = "${web}.${ds}";
"application/xhtml+xml" = "${web}.${ds}";
"x-scheme-handler/http" = "${web}.${ds}";
"x-scheme-handler/https" = "${web}.${ds}";
"x-scheme-handler/chrome" = "${web}.${ds}";
"application/x-extension-htm" = "${web}.${ds}";
"application/x-extension-xht" = "${web}.${ds}";
"application/x-extension-html" = "${web}.${ds}";
"application/x-extension-shtml" = "${web}.${ds}";
"application/x-extension-xhtml" = "${web}.${ds}";
"x-scheme-handler/about" = "${web}.${ds}";
"x-scheme-handler/unknown" = "${web}.${ds}";
# OTHER
"x-scheme-handler/spotify" = "spotify.${ds}";
};
};
}

View file

@ -0,0 +1,31 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.bat;
in
{
options.module.programs.cli.bat = {
enable = mkBool;
};
config = mkIf cfg.enable {
programs.bat = True // {
extraPackages = with pkgs.bat-extras; [
# prettybat
batwatch
batgrep
batdiff
];
config = {
wrap = "character";
};
};
};
}

View file

@ -0,0 +1,20 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.cava;
in
{
options.module.programs.cli.cava = {
enable = mkBool;
};
config = mkIf cfg.enable {
programs.cava = True;
};
}

View file

@ -0,0 +1,26 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.eza;
in
{
options.module.programs.cli.eza = {
enable = mkBool;
};
config = mkIf cfg.enable {
programs.eza = True // {
icons = "auto";
extraOptions = [
"--group-directories-first"
"--icons=always"
];
};
};
}

View file

@ -0,0 +1,25 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.fd;
in
{
options.module.programs.cli.fd = {
enable = mkBool;
};
config = mkIf cfg.enable {
programs.fd = True // {
ignores = [
".git/"
"*.bak"
];
};
};
}

View file

@ -0,0 +1,87 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.fetch;
in
{
options = {
module.programs.cli.fetch = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ onefetch ];
programs.fastfetch = True // {
settings = {
logo = {
type = "builtin";
source = "nixos_small";
padding = {
left = 1;
right = 2;
top = 1;
};
color = {
"1" = "cyan";
"2" = "blue";
};
};
display = {
separator = ": ";
color = {
keys = "cyan";
title = "blue";
};
size = {
ndigits = 2;
maxPrefix = "GB";
};
};
modules = [
{
type = "title";
color = {
user = "cyan";
at = "cyan";
host = "cyan";
};
}
{
type = "uptime";
key = "UPT ";
format = "{2} hours, {3} mins";
}
{
type = "packages";
key = "PKG ";
}
{
type = "shell";
key = "SHL ";
format = "{6} {4}";
}
{
type = "wm";
key = "DWM ";
format = "{2} / {3}";
}
{
type = "memory";
key = "MEM ";
format = "{} / {}";
}
{ type = "break"; }
{ type = "colors"; }
];
};
};
};
}

View file

@ -0,0 +1,30 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.fzf;
in
{
options = {
module.programs.cli.fzf = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.fzf = True // {
defaultOptions = [
"--border=rounded"
"--info=hidden"
"--no-mouse"
"--margin=1,49%,1,1"
"--padding=0"
];
};
};
}

View file

@ -0,0 +1,66 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.git;
never = "git@git.sr.ht:~neverness";
interval = 300;
repo = {
ultima = "/persist/flake";
wallpapers = "/persist/wallpapers";
readme = "/persist/readme";
niXtended = "/persist/niXtended";
};
in
{
options = {
module.programs.cli.git = {
enable = mkBool;
name = mkOpt.str;
email = mkOpt.str;
};
};
config = mkIf cfg.enable {
programs.git = True // {
package = pkgs.gitMinimal;
userName = sec.git.name;
userEmail = sec.git.email;
extraConfig = {
color.ui = true;
init.defaultBranch = "main";
safe.directory = flakeDir;
};
};
services.git-sync = False // {
repositories = {
"ultima" = {
inherit interval;
uri = "${never}/ultima";
path = repo.ultima;
};
"wallpapers" = {
inherit interval;
uri = "${never}/wallpapers";
path = repo.wallpapers;
};
"readme" = {
inherit interval;
uri = "${never}/readme";
path = repo.readme;
};
"niXtended" = {
inherit interval;
uri = "${never}/niXtended";
path = repo.niXtended;
};
};
};
};
}

View file

@ -0,0 +1,24 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.gpg;
in
{
options = {
module.programs.cli.gpg = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.gpg = True // {
};
};
}

View file

@ -0,0 +1,24 @@
{
programs.helix.settings.keys = {
normal = {
y = "yank";
Y = "yank_to_clipboard";
D = "delete_selection_noyank";
space = {
space = "file_picker";
c = "toggle_comments";
f = "file_picker_in_current_directory";
F = "file_picker";
b = {
b = "buffer_picker";
n = ":buffer-next";
p = ":buffer-previous";
d = ":buffer-close";
D = ":buffer-close!";
O = ":buffer-close-others";
};
};
};
insert = { };
};
}

View file

@ -0,0 +1,24 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.helix;
in
{
options = {
module.programs.cli.helix = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.helix = True // {
defaultEditor = true;
};
};
}

View file

@ -0,0 +1,227 @@
{ pkgs, lib, ... }:
let
inherit (lib) getExe;
inherit (pkgs.nodePackages_latest) prettier;
indent = {
tab-width = 2;
unit = " ";
};
auto-format = true;
in
{
programs.helix = with pkgs; {
languages = {
language = [
{
# nix
inherit auto-format indent;
name = "nix";
language-servers = [
"nixd"
"nil"
];
formatter.command = "${getExe nixfmt-rfc-style}";
}
{
# html
inherit auto-format indent;
name = "html";
language-servers = [ "vscode-html" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"html"
];
};
}
{
# json
inherit auto-format indent;
name = "json";
language-servers = [ "vscode-json" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"json"
];
};
}
{
# jsonc
inherit auto-format indent;
name = "jsonc";
language-servers = [ "vscode-json" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"json"
];
};
}
{
# css
inherit auto-format indent;
name = "css";
language-servers = [ "vscode-css" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"css"
];
};
}
{
# scss
inherit auto-format indent;
name = "scss";
language-servers = [ "vscode-css" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"scss"
];
};
}
{
# markdown
inherit auto-format indent;
name = "markdown";
language-servers = [ "marksman" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"markdown"
];
};
}
{
# typescript
inherit auto-format indent;
name = "typescript";
language-servers = [ "typescript" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"typescript"
];
};
}
{
# typescript
inherit auto-format indent;
name = "tsx";
language-servers = [ "typescript" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"typescript"
];
};
}
{
# yaml
inherit auto-format indent;
name = "yaml";
language-servers = [ "yaml" ];
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"yaml"
];
};
}
{
# python
inherit auto-format indent;
name = "python";
language-servers = [
"pylsp"
"ruff"
];
shebangs = [ "${getExe python39}" ];
file-types = [
"py"
"pyi"
"py3"
"pyw"
".pythonstartup"
".pythonrc"
];
roots = [
"."
"pyproject.toml"
"pyrightconfig.json"
];
comment-token = "#";
scope = "source.python";
injection-regex = "python";
formatter = {
command = "${getExe prettier}";
args = [
"--use-tabs"
"--parser"
"python"
];
};
}
];
language-server =
let
vscode = vscode-langservers-extracted;
typescript = typescript-language-server;
yaml = yaml-language-server;
in
{
nil.command = "${getExe nil}";
nixd.command = "${getExe nixd}";
} # nix
// {
typescript.command = "${getExe typescript}";
} # typescript
// {
yaml.command = "${getExe yaml}";
} # typescript
// {
marksman.command = "${getExe marksman}";
} # markdown
// {
vscode-html.command = "${vscode}/bin/vscode-html-language-server";
vscode-json.command = "${vscode}/bin/vscode-json-language-server";
vscode-css.command = "${vscode}/bin/vscode-css-language-server";
} # vscode <lang> server
// {
ruff.command = "${getExe ruff-lsp}";
pyright = {
command = "${getExe pyright}";
args = [ "--stdio" ];
config = {
reportMissingTypeStubs = false;
python.analysis = {
typeCheckingMode = "basic";
autoImportCompletions = true;
};
};
};
} # python
;
};
};
}

View file

@ -0,0 +1,63 @@
{
programs.helix = {
settings = {
theme = "themo";
editor = {
line-number = "relative";
mouse = true;
cursorline = true;
auto-completion = true;
completion-replace = true;
auto-info = true;
auto-pairs = true;
true-color = true;
color-modes = true;
bufferline = "multiple";
indent-guides = {
render = true;
character = "»";
skip-levels = 0;
};
cursor-shape = {
insert = "bar";
normal = "block";
select = "underline";
};
soft-wrap = {
enable = true;
max-wrap = 25;
wrap-indicator = " ";
};
statusline = {
left = [
"mode"
"spacer"
"spinner"
"file-name"
"file-modification-indicator"
"read-only-indicator"
];
center = [ ];
right = [
"register"
"file-type"
"separator"
"spacer"
"position"
"position-percentage"
"separator"
"total-line-numbers"
"spacer"
];
separator = "|";
mode.normal = "NORMAL";
mode.insert = "INSERT";
mode.select = "SELECT";
};
file-picker = {
hidden = false;
};
};
};
};
}

View file

@ -0,0 +1,234 @@
{ lib, config, ... }:
{
programs.helix.themes =
with config.lib.stylix.colors.withHashtag;
lib.mkForce {
themo =
let
BASE00 = "${base00}";
BASE01 = "${base01}";
BASE02 = "${base02}";
BASE03 = "${base03}";
BASE04 = "${base04}";
BASE05 = "${base05}";
BASE06 = "${base06}";
BASE07 = "${base07}";
BASE08 = "${base08}";
BASE09 = "${base09}";
BASE0A = "${base0A}";
BASE0B = "${base0B}";
BASE0C = "${base0C}";
BASE0D = "${base0D}";
BASE0E = "${base0E}";
BASE0F = "${base0F}";
in
{
"attributes" = BASE09;
"comment" = {
fg = BASE03;
modifiers = [ "italic" ];
};
"constant" = BASE09;
"constant.character.escape" = BASE0C;
"constant.numeric" = BASE09;
"constructor" = BASE0D;
"debug" = BASE03;
"diagnostic" = {
modifiers = [ "underlined" ];
};
"diff.delta" = BASE09;
"diff.minus" = BASE08;
"diff.plus" = BASE0B;
"error" = BASE08;
"function" = BASE0D;
"hint" = BASE03;
"info" = BASE0D;
"keyword" = BASE0E;
"label" = BASE0E;
"namespace" = BASE0E;
"operator" = BASE05;
"special" = BASE0D;
"string" = BASE0B;
"type" = BASE0A;
"variable" = BASE08;
"variable.other.member" = BASE0B;
"warning" = BASE09;
"markup.bold" = {
fg = BASE0A;
modifiers = [ "bold" ];
};
"markup.heading" = BASE0D;
"markup.italic" = {
fg = BASE0E;
modifiers = [ "italic" ];
};
"markup.link.text" = BASE08;
"markup.link.url" = {
fg = BASE09;
modifiers = [
"underlined"
"italic"
];
};
"markup.list" = BASE08;
"markup.quote" = BASE0C;
"markup.raw" = BASE0B;
"markup.strikethrough" = {
modifiers = [ "crossed_out" ];
};
"diagnostic.hint" = {
underline = {
style = "curl";
};
};
"diagnostic.info" = {
underline = {
style = "curl";
};
};
"diagnostic.warning" = {
underline = {
style = "curl";
};
};
"diagnostic.error" = {
underline = {
style = "curl";
};
};
"ui.background" = {
fg = BASE04;
bg = BASE00;
};
"ui.bufferline.separator" = {
fg = BASE00;
bg = BASE01;
};
"ui.bufferline.active" = {
fg = BASE04;
bg = BASE02;
modifiers = [ "bold" ];
};
"ui.bufferline" = {
fg = BASE04;
bg = BASE00;
};
"ui.cursor" = {
fg = BASE0A;
modifiers = [ "reversed" ];
};
"ui.cursor.insert" = {
fg = BASE0A;
modifiers = [ "reversed" ];
};
"ui.cursorline.primary" = {
fg = BASE05;
bg = BASE01;
};
"ui.cursor.match" = {
fg = BASE0A;
modifiers = [ "reversed" ];
};
"ui.cursor.select" = {
fg = BASE0A;
modifiers = [ "reversed" ];
};
"ui.gutter" = {
bg = BASE00;
};
"ui.help" = {
fg = BASE04;
bg = BASE01;
};
"ui.linenr" = {
fg = BASE03;
bg = BASE00;
};
"ui.linenr.selected" = {
fg = BASE04;
bg = BASE01;
modifiers = [ "bold" ];
};
"ui.menu" = {
fg = BASE05;
bg = BASE01;
};
"ui.menu.scroll" = {
fg = BASE03;
bg = BASE01;
};
"ui.menu.selected" = {
fg = BASE01;
bg = BASE04;
};
"ui.popup" = {
bg = BASE01;
};
"ui.selection" = {
bg = BASE02;
};
"ui.selection.primary" = {
bg = BASE02;
};
"ui.statusline" = {
fg = BASE04;
bg = BASE01;
};
"ui.statusline.inactive" = {
bg = BASE01;
fg = BASE03;
modifiers = [ "bold" ];
};
"ui.statusline.insert" = {
fg = BASE00;
bg = BASE0B;
modifiers = [ "bold" ];
};
"ui.statusline.normal" = {
fg = BASE06;
bg = BASE02;
modifiers = [ "bold" ];
};
"ui.statusline.select" = {
fg = BASE00;
bg = BASE0A;
modifiers = [ "bold" ];
};
"ui.text" = BASE05;
"ui.text.focus" = BASE05;
"ui.virtual.indent-guide" = {
fg = BASE03;
};
"ui.virtual.wrap" = {
fg = BASE03;
};
"ui.virtual.inlay-hint" = {
fg = BASE03;
};
"ui.virtual.ruler" = {
bg = BASE01;
};
"ui.virtual.jump-label" = {
fg = BASE0A;
modifiers = [ "bold" ];
};
"ui.window" = {
bg = BASE01;
fg = BASE04;
};
};
};
}

View file

@ -0,0 +1,20 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.joshuto;
in
{
options = {
module.programs.cli.joshuto = {
enable = mkBool;
};
};
config = mkIf cfg.enable { programs.joshuto = True; };
}

View file

@ -0,0 +1,135 @@
{
programs.joshuto.mimetype = {
class = {
audio_default = [
{
command = "mpv";
args = [ "--" ];
}
];
image_default = [
{
command = "swayimg";
args = [ "-f --" ];
}
];
video_default = [
{
command = "mpv";
args = [ "--" ];
fork = true;
silent = true;
}
];
text_default = [
{ command = "hx"; }
{
command = "bat";
args = [ "--paging=always" ];
}
];
};
video = {
"inherit" = "video_default";
};
text = {
"inherit" = "text_default";
};
extensions = {
# AUDIO
aac."inherit" = "audio_default";
ac3."inherit" = "audio_default";
aiff."inherit" = "audio_default";
ape."inherit" = "audio_default";
dts."inherit" = "audio_default";
flac."inherit" = "audio_default";
m4a."inherit" = "audio_default";
mp3."inherit" = "audio_default";
oga."inherit" = "audio_default";
ogg."inherit" = "audio_default";
opus."inherit" = "audio_default";
wav."inherit" = "audio_default";
wv."inherit" = "audio_default";
# VIDEO
avi."inherit" = "video_default";
av1."inherit" = "video_default";
flv."inherit" = "video_default";
mkv."inherit" = "video_default";
m4v."inherit" = "video_default";
mov."inherit" = "video_default";
mp4."inherit" = "video_default";
ts."inherit" = "video_default";
webm."inherit" = "video_default";
wmv."inherit" = "video_default";
# TEXT
bib."inherit" = "text_default";
build."inherit" = "text_default";
c."inherit" = "text_default";
cfg."inherit" = "text_default";
cmake."inherit" = "text_default";
conf."inherit" = "text_default";
cpp."inherit" = "text_default";
css."inherit" = "text_default";
csv."inherit" = "text_default";
cu."inherit" = "text_default";
desktop."inherit" = "text_default";
ebuild."inherit" = "text_default";
eex."inherit" = "text_default";
env."inherit" = "text_default";
ex."inherit" = "text_default";
exs."inherit" = "text_default";
go."inherit" = "text_default";
gpl."inherit" = "text_default";
h."inherit" = "text_default";
hpp."inherit" = "text_default";
hs."inherit" = "text_default";
ini."inherit" = "text_default";
ipynb."inherit" = "text_default";
java."inherit" = "text_default";
jl."inherit" = "text_default";
js."inherit" = "text_default";
json."inherit" = "text_default";
jsonc."inherit" = "text_default";
kdl."inherit" = "text_default";
kt."inherit" = "text_default";
kvconfig."inherit" = "text_default";
lock."inherit" = "text_default";
log."inherit" = "text_default";
lua."inherit" = "text_default";
md."inherit" = "text_default";
micro."inherit" = "text_default";
ninja."inherit" = "text_default";
nix."inherit" = "text_default";
norg."inherit" = "text_default";
org."inherit" = "text_default";
po."inherit" = "text_default";
pot."inherit" = "text_default";
py."inherit" = "text_default";
qmd."inherit" = "text_default";
rasi."inherit" = "text_default";
rkt."inherit" = "text_default";
rktd."inherit" = "text_default";
rproj."inherit" = "text_default";
rs."inherit" = "text_default";
rstheme."inherit" = "text_default";
scm."inherit" = "text_default";
scss."inherit" = "text_default";
service."inherit" = "text_default";
sh."inherit" = "text_default";
socket."inherit" = "text_default";
sql."inherit" = "text_default";
srt."inherit" = "text_default";
svelte."inherit" = "text_default";
toml."inherit" = "text_default";
tsx."inherit" = "text_default";
txt."inherit" = "text_default";
vim."inherit" = "text_default";
xml."inherit" = "text_default";
yaml."inherit" = "text_default";
yml."inherit" = "text_default";
};
};
}

View file

@ -0,0 +1,28 @@
{
programs.joshuto.settings = {
mouse_support = false;
xdg_open = false;
xdg_open_fork = false;
use_trash = true;
focus_on_create = true;
max_preview_size = "2 GB";
zoxide_update = true;
display = {
collapse_preview = true;
column_ratio = [
1
3
4
];
show_borders = true;
show_icons = true;
tilde_in_titlebar = true;
sort = {
directories_first = true;
};
};
tab = {
home_page = "inherit";
};
};
}

View file

@ -0,0 +1,18 @@
{ config, ... }:
{
programs.joshuto.theme = with config.lib.stylix.colors; {
lscolors_enabled = true;
tabs.styles = {
active = {
bg = "${base00}";
fg = "${base0E}";
bold = true;
};
inactive = {
bg = "${base00}";
fg = "${base03}";
bold = false;
};
};
};
}

View file

@ -0,0 +1,35 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.legendary;
in
{
options = {
module.programs.cli.legendary = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ legendary-gl ];
xdg.configFile."legendary/config.ini".text = ''
[Legendary]
log_level = debug
max_memory = 2048
max_workers = 8
install_dir = ${dev.hdd}/Games[LITE]
locale = en-US
disable_https = false
disable_update_check = false
disable_update_notice = false
disable_auto_aliasing = false
'';
};
}

View file

@ -0,0 +1,32 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.lsd;
in
{
options.module.programs.cli.lsd = {
enable = mkBool;
};
config = mkIf cfg.enable {
programs.lsd = True // {
enableAliases = true;
settings = {
header = false;
color = {
when = "auto";
};
icons = {
when = "always";
ignore-globs = [ ".git" ];
};
};
};
};
}

View file

@ -0,0 +1,81 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.micro;
in
{
options = {
module.programs.cli.micro = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.micro = True // {
settings = {
clipboard = "terminal";
colorscheme = "base16";
autosu = true;
mkparents = true;
scrollbar = true;
softwrap = true;
status = false;
statusline = false;
statusformatl = "q";
savehistory = true;
saveundo = true;
};
};
xdg.configFile."micro/colorschemes/base16.micro".text = ''
color-link comment "bold white"
color-link constant "cyan"
color-link constant.bool "bold cyan"
color-link constant.bool.true "bold green"
color-link constant.bool.false "bold red"
color-link constant.string "yellow"
color-link constant.string.url "underline blue, white"
color-link constant.specialChar "bold magenta"
color-link identifier "bold red"
color-link identifier.macro "bold red"
color-link identifier.var "bold blue"
color-link identifier.class "bold white"
color-link statement "bold yellow"
color-link symbol "red"
color-link symbol.brackets "blue"
color-link symbol.tag "bold blue"
color-link symbol.tag.extended "bold green"
color-link preproc "bold cyan"
color-link type "green"
color-link type.keyword "bold green"
color-link special "magenta"
color-link ignore "default"
color-link error "bold ,brightred"
color-link todo "underline black,brightyellow"
color-link hlsearch "white,darkgreen"
color-link indent-char ",brightgreen"
color-link line-number "white"
color-link line-number.scrollbar "green"
color-link statusline "white,blue"
color-link tabbar "white,blue"
color-link current-line-number "red"
color-link current-line-number.scroller "red"
color-link diff-added "green"
color-link diff-modified "yellow"
color-link diff-deleted "red"
color-link gutter-error ",red"
color-link gutter-warning "red"
color-link color-column "cyan"
color-link underlined.url "underline blue, white"
color-link divider "blue"
color-link match-brace "black,cyan"
color-link tab-error "brightred"
color-link trailingws "brightred"
'';
};
}

View file

@ -0,0 +1,22 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli;
in
{
options = {
module.programs.cli = {
pkgs = mkOpt.list.pkgs;
};
};
config = {
home.packages = [ ] ++ cfg.pkgs;
};
}

View file

@ -0,0 +1,20 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.ripgrep;
in
{
options.module.programs.cli.ripgrep = {
enable = mkBool;
};
config = mkIf cfg.enable {
programs.ripgrep = True;
};
}

View file

@ -0,0 +1,55 @@
[general]
auto_hide = true
accent_color = "LightRed"
beginner_mode = false
headers_hide = false
[connection]
url = "http://127.0.0.1:9091/transmission/rpc" # REQUIRED!
torrents_refresh = 1
stats_refresh = 1
free_space_refresh = 2
# username = "CHANGE_ME"
# password = "CHANGE_ME"
[torrents_tab]
# Available fields:
# Id, Name, SizeWhenDone, Progress, Eta, DownloadRate, UploadRate, DownloadDir,
# Padding, UploadRatio, UploadedEver, AddedDate, ActivityDate, PeersConnected
# SmallStatus, Category, CategoryIcon
headers = ["Name", "SizeWhenDone", "Progress", "Eta", "DownloadRate" ]
default_sort = "Progress"
default_sort_reverse = true
category_icon_insert_into_name = true
[search_tab]
# If you uncomment this, providers won't be automatically added in future
# versions of Rustmission.
# providers = ["Knaben", "Nyaa"]
[icons]
# Ascii alternatives # Defaults
# upload = "↑" # ""
# download = "↓" # ""
# arrow_left = "←" # ""
# arrow_right = "→" # ""
# arrow_up = "↑" # ""
# arrow_down = "↓" # ""
# triangle_right = "▶" # "▶"
# triangle_down = "▼" # "▼"
# file = "∷" # ""
# disk = "[D]" # "󰋊"
# help = "[?]" # "󰘥"
# success = "✔" # ""
# failure = "✖" # ""
# searching = "⟳" # ""
# verifying = "⟳" # "󰑓"
# loading = "⌛" # "󱥸"
# pause = "‖" # "󰏤"
# idle = "○" # "󱗼"
# magnifying_glass = "[o]" # ""
# provider_disabled = "⛔" # "󰪎"
# provider_category_general = "[G]" # ""
# provider_category_anime = "[A]" # "󰎁"
# sort_ascending = "↓" # "󰒼"
# sort_descending = "↑" # "󰒽""

View file

@ -0,0 +1,26 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.rustmission;
in
{
options = {
module.programs.cli.rustmission = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ rustmission ];
xdg.configFile = {
"rustmission/config.toml".source = ./config.toml;
};
};
}

View file

@ -0,0 +1,31 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.top;
in
{
options = {
module.programs.cli.top = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ nvtopPackages.amd ];
programs.btop = True // {
settings = {
color_theme = "TTY";
theme_background = true;
vim_keys = true;
rounded_corners = true;
};
};
};
}

View file

@ -0,0 +1,362 @@
{ x, ... }:
with x;
{
programs.yazi.keymap = {
manager = {
prepend_keymap = [
# main
{
on = [ "q" ];
run = "close";
desc = "Close tab/yazi";
}
{
on = [ "l" ];
run = "plugin smart-enter";
desc = "Enter/open";
}
{
on = [ "!" ];
run = "shell '$SHELL' --block --confirm";
desc = "Enter to shell";
}
{
on = [ "<Esc>" ];
run = "close";
desc = "Close";
}
{
on = [ "<Right>" ];
run = "plugin smart-enter";
desc = "Enter/open";
}
{
on = [ "<Enter>" ];
run = "plugin smart-enter";
desc = "Enter/open";
}
# vis
{
on = [
"v"
"m"
];
run = "plugin max-preview";
desc = "Maximize preview";
}
{
on = [
"v"
"p"
];
run = "plugin hide-preview";
desc = "Hide preview";
}
{
on = [
"v"
"v"
];
run = "visual_mode";
desc = "Select mode";
}
{
on = [
"v"
"V"
];
run = "visual_mode --unset";
desc = "Un-select mode";
}
{
on = [
"v"
"a"
];
run = "toggle_all --state=true";
desc = "Select all";
}
{
on = [
"v"
"r"
];
run = "toggle_all --state=none";
desc = "Unselect all";
}
{
on = [
"v"
"h"
];
run = "hidden toggle";
desc = "Hidden files with .*";
}
# archive
{
on = [ "C" ];
run = "plugin ouch --args=zip";
desc = "Compress with ouch";
}
# del
{
on = [
"d"
"d"
];
run = "remove";
desc = "Delete";
}
{
on = [
"d"
"D"
];
run = "remove --permanently";
desc = "Delete permanently";
}
{
on = [
"D"
"d"
];
run = "remove --force";
desc = "Delete force";
}
{
on = [
"D"
"D"
];
run = "remove --permanently --force";
desc = "Delete permanently via force";
}
# create
{
on = [
"a"
"f"
];
run = "create";
desc = "Create file";
}
{
on = [
"a"
"d"
];
run = "create --dir";
desc = "Create directory";
}
# rename
{
on = [
"r"
"r"
];
run = "rename --cursor=end";
desc = "Rename";
}
{
on = [
"r"
"n"
];
run = "rename --empty=stem --cursor=start";
desc = "Rename namefile";
}
{
on = [
"r"
"e"
];
run = "rename --empty=ext --cursor=end";
desc = "Rename extension";
}
{
on = [
"r"
"a"
];
run = "rename --empty=all";
desc = "Delete all and rename";
}
# naviagte
{
on = [
"c"
"d"
];
run = "cd --interactive";
desc = "Jump interactively";
}
{
on = [
"g"
"f"
"f"
];
run = "cd ${flakeDir}";
desc = "Go to flake main dir";
}
{
on = [
"g"
"f"
"h"
];
run = "cd ${flakeDir}/modules/home";
desc = "Go to home modules";
}
{
on = [
"g"
"f"
"H"
];
run = "cd ${flakeDir}/modules/host";
desc = "Go to nixos modules";
}
{
on = [
"g"
"n"
"s"
];
run = "cd /nix/store";
desc = "Go to store";
}
{
on = [
"g"
"d"
"h"
];
run = "cd ${dev.hdd}";
desc = "Go to HDD";
}
{
on = [
"g"
"d"
"s"
];
run = "cd ${dev.ssd}";
desc = "Go to SSD";
}
{
on = [
"g"
"r"
];
run = ''
shell 'ya emit cd "$(git rev-parse --show-toplevel)"'
'';
desc = "Go to root of git repo";
}
# tabs
{
on = [ "t" ];
run = "plugin smart-tab";
desc = "Create a tab and enter the hovered directory";
}
{
on = [ "]" ];
run = "tab_switch -1 --relative";
desc = "Switch to the next tab";
}
{
on = [ "[" ];
run = "tab_switch 1 --relative";
desc = "Switch to the previous tab";
}
# yank
{
on = [ "y" ];
run = "yank";
desc = "Yank files";
}
{
on = [ "u" ];
run = ''
shell 'for path in "$@"; do echo "file://$path"; done | wl-copy -t text/uri-list'
'';
desc = "Yank files systemly";
}
# paste
{
on = [
"p"
"p"
];
run = "paste";
desc = "Paste yanked files";
}
{
on = [
"p"
"P"
];
run = "plugin smart-paste";
desc = "Paste yanked files in preview dir";
}
{
on = [
"p"
"f"
];
run = "plugin paste-file";
desc = "Create new file from clipboard";
}
{
on = [
"p"
"F"
];
run = "plugin paste-file --args='quiet'";
desc = "Create new file from clipboard";
}
# mounts
{
on = [
"m"
"a"
];
run = "plugin archivemount --args=mount";
desc = "Mount selected archive";
}
{
on = [
"m"
"u"
];
run = "plugin archivemount --args=unmount";
desc = "Unmount and save changes to original archive";
}
];
};
completion = {
prepend_keymap = [
{
on = [ "<C-j>" ];
run = "arrow 1";
}
{
on = [ "<C-k>" ];
run = "arrow -1";
}
];
};
};
}

View file

@ -0,0 +1,20 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.yazi;
in
{
options = {
module.programs.cli.yazi = {
enable = mkBool;
};
};
config = mkIf cfg.enable { programs.yazi = True // { }; };
}

View file

@ -0,0 +1,74 @@
{ config, ... }:
{
programs.yazi.initLua = with config.lib.stylix.colors.withHashtag; ''
require("archivemount"):setup()
require("full-border"):setup { type = ui.Border.ROUNDED, }
require("yatline-githead"):setup()
require("yatline"):setup({
section_separator = { open = "", close = "" },
part_separator = { open = "", close = "" },
inverse_separator = { open = "", close = "" },
style_a = { fg = "white",
bg_mode = {
normal = "${base02}",
select = "${base02}",
un_set = "${base02}"
}
},
style_b = { bg = "${base03}", fg = "white" },
style_c = { bg = "black", fg = "white" },
permissions_t_fg = "green",
permissions_r_fg = "yellow",
permissions_w_fg = "red",
permissions_x_fg = "cyan",
permissions_s_fg = "darkgray",
show_background = false,
display_header_line = true,
display_status_line = true,
tab_width = 20,
tab_use_inverse = false,
selected = { icon = "󰻭", fg = "yellow" },
copied = { icon = "", fg = "green" },
cut = { icon = "", fg = "red" },
total = { icon = "󰮍", fg = "yellow" },
succ = { icon = "", fg = "green" },
fail = { icon = "", fg = "red" },
found = { icon = "󰮕", fg = "blue" },
processed = { icon = "󰐍", fg = "green" },
header_line = {
left = {
section_a = { {type = "string", custom = false, name = "tab_path"}, },
section_b = { },
section_c = { }
},
right = {
section_a = { {type = "line", custom = false, name = "tabs", params = {"right"}}, },
section_b = { },
section_c = { {type = "coloreds", custom = false, name = "githead"}, }
}
},
status_line = {
left = {
section_a = { {type = "string", custom = false, name = "tab_mode"}, },
section_b = { {type = "string", custom = false, name = "cursor_position"}, },
section_c = { {type = "string", custom = false, name = "hovered_size"},
{type = "coloreds", custom = false, name = "count"}, }
},
right = {
section_a = { {type = "string", custom = false, name = "date", params = {"%d/%m/%Y"}}, },
section_b = { {type = "string", custom = false, name = "hovered_file_extension", params = {true}},
{type = "string", custom = false, name = "hovered_mime"}, },
section_c = { {type = "coloreds", custom = false, name = "permissions"}, }
}
},
})
'';
}

View file

@ -0,0 +1,87 @@
{ pkgs, ... }:
with pkgs;
let
mk = name: { ${name} = "${yazi-plugins}/${name}.yazi"; };
plugin = name: text: {
"${name}" = toString (writeTextDir "${name}.yazi/init.lua" text) + "/${name}.yazi";
};
yazi-plugins = fetchFromGitHub {
owner = "yazi-rs";
repo = "plugins";
rev = "71c4fc2e6fa1d6f70c85bf525842d6888d1ffa46";
hash = "sha256-X3R5bsnzGv1TVXOKdhAyspDMguVAyc9tvCxJlypUUAA=";
};
in
{
programs.yazi.plugins =
# builtin
(mk "max-preview")
// (mk "hide-preview")
// (mk "full-border")
// (mk "chmod")
// {
# fetched
yatline = fetchFromGitHub {
owner = "imsi32";
repo = "yatline.yazi";
rev = "600ed1fb1d04e1292da04280a65f8deca04dc36a";
hash = "sha256-oHCRScbahGaX8MTVNalNXlxQ7NJN5QKvGHbTXreAWFM=";
};
yatline-githead = fetchFromGitHub {
owner = "imsi32";
repo = "yatline-githead.yazi";
rev = "a6377a8b190a8563645e79c6d71e7f398e516c52";
hash = "sha256-SH2BDk8sHZT1L12gJjVbVBipiTwF/KARkuaJfNGdGXg=";
};
ouch = fetchFromGitHub {
owner = "ndtoan96";
repo = "ouch.yazi";
rev = "b8698865a0b1c7c1b65b91bcadf18441498768e6";
hash = "sha256-eRjdcBJY5RHbbggnMHkcIXUF8Sj2nhD/o7+K3vD3hHY=";
};
archivemount = fetchFromGitHub {
owner = "AnirudhG07";
repo = "archivemount.yazi";
rev = "d4f3e6a41f955a1e821305ddbc16e571917511f4";
hash = "sha256-YoEpAQKXBH/W+IUTWaTZU/Q94Dp5mbLxcGuUi9FezYA=";
};
mdcat = fetchFromGitHub {
owner = "GrzegorzKozub";
repo = "mdcat.yazi";
rev = "d3d5089d06fe4ed14504726722f89c977f9eb54a";
hash = "sha256-F6rNLWJxMmTOOlna6lev4m1h559BWftfy6pNoTqVGKw=";
};
paste = fetchFromGitHub {
owner = "crawraps";
repo = "paste-file.yazi";
rev = "e59d60cb82ad8d81268b93d20804c44701eca61c";
hash = "sha256-dV59B5UBBK59TiMv6wfG1EHx9bk3HmpYrQYND1qayTY=";
};
}
# custom
// (plugin "smart-enter" ''
--- @sync entry
local function setup(self, opts) self.open_multi = opts.open_multi end
local function entry(self)
local h = cx.active.current.hovered
ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = not self.open_multi })
end return { entry = entry, setup = setup }
'')
// (plugin "smart-paste" ''
--- @sync entry
return { entry = function()
local h = cx.active.current.hovered
if h and h.cha.is_dir then
ya.manager_emit("enter", {})
ya.manager_emit("paste", {})
ya.manager_emit("leave", {}) else
ya.manager_emit("paste", {}) end end, }
'')
// (plugin "smart-tab" ''
--- @sync entry
return { entry = function()
local h = cx.active.current.hovered
ya.manager_emit("tab_create", h and h.cha.is_dir and { h.url } or { current = true })
end, }
'');
}

View file

@ -0,0 +1,199 @@
{ x, pkgs, ... }:
with x;
{
programs.yazi = {
shellWrapperName = "yy";
settings = {
manager = {
ratio = [
1
4
4
];
show_hidden = false;
sort_by = "natural";
sort_dir_first = true;
sort_reverse = false;
linemode = "size";
show_symlink = true;
};
preview = {
wrap = "yes";
tab_size = 1;
image_filter = "lanczos3";
image_quality = 90;
max_height = 1000;
max_width = 1000;
};
opener = {
open = [
{ run = "xdg-open $@"; }
];
edit = [
{
run = ''hx "$@"'';
block = true;
}
];
reveal = [ { run = ''xdg-open "$(dirname "$@")"''; } ];
play = [
{
run = ''mpv --force-window "$@"'';
orphan = true;
}
];
image = [
{
run = ''swayimg "$@"'';
block = true;
}
];
document = [
{
desc = "Document";
orphan = true;
run = "onlyoffice-desktopeditors";
}
];
extract = [
{ run = ''ouch d -y "$@"''; }
];
};
open = {
rules = [
# Folder
{
name = "*/";
use = [
"edit"
"open"
"reveal"
];
}
# Text
{
mime = "text/*";
use = [
"edit"
"reveal"
];
}
# Image
{
mime = "image/*";
use = [
"open"
"reveal"
];
}
# Media
{
mime = "{audio,video}/*";
use = [
"play"
"reveal"
];
}
# Archive
{
mime = "application/{,g}zip";
use = [
"extract"
"reveal"
];
}
{
mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}";
use = [
"extract"
"reveal"
];
}
# JSON
{
mime = "application/{json,x-ndjson,octet-stream}";
use = [
"edit"
"reveal"
];
}
{
mime = "*/javascript";
use = [
"edit"
"reveal"
];
}
# Empty file
{
mime = "inode/x-empty";
use = [
"edit"
"reveal"
];
}
{
mime = "inode/empty";
use = [
"edit"
"reveal"
];
}
# Fallback
{
name = "*";
use = [
"open"
"reveal"
];
}
# Documents
{
mime = "application/vnd.openxmlformats-officedocument.*";
use = "document";
}
];
};
plugin = {
prepend_previewers = [
{
mime = "application/*zip";
run = "ouch";
}
{
mime = "application/x-tar";
run = "ouch";
}
{
mime = "application/x-bzip2";
run = "ouch";
}
{
mime = "application/x-7z-compressed";
run = "ouch";
}
{
mime = "application/x-rar";
run = "ouch";
}
{
mime = "application/x-xz";
run = "ouch";
}
{
name = "*.md";
run = "mdcat";
}
];
};
};
};
home.packages = with pkgs; [
ffmpegthumbnailer
wl-clipboard
jq
poppler_min
mdcat
];
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,26 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.cli.zoxide;
in
{
options = {
module.programs.cli.zoxide = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.zoxide = True // {
enableFishIntegration = true;
enableZshIntegration = true;
options = [ "--cmd cd" ];
};
};
}

View file

@ -0,0 +1,23 @@
{ fetchPypi, python3Packages }:
python3Packages.buildPythonApplication rec {
pname = "anicli_api";
version = "0.7.0";
pyproject = true;
dontCheckRuntimeDeps = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-LwHfxxwXxcUy1HKJfYXusz4wZCTZjQACMWQpYr9t8Vk=";
};
build-system = with python3Packages; [
poetry-core
];
dependencies = with python3Packages; [
httpx
attrs
parsel
tqdm
];
}

View file

@ -0,0 +1,27 @@
{
pkgs,
fetchPypi,
python3Packages,
}:
python3Packages.buildPythonApplication rec {
pname = "anicli_ru";
version = "5.0.12";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-s8uI0ch+SPqthHy+d0jcB6o5/Zqx89JHM68Q00nwCFA=";
};
build-system = with python3Packages; [
hatchling
setuptools
];
dependencies = with pkgs; [
python3Packages.hatchling
(callPackage ./eggella.nix { })
(callPackage ./chompjs.nix { })
(callPackage ./anicli-api.nix { })
];
}

View file

@ -0,0 +1,16 @@
{ fetchPypi, python3Packages }:
let
setup = with python3Packages; [ setuptools ];
in
python3Packages.buildPythonApplication rec {
pname = "chompjs";
version = "1.3.0";
pyproject = true;
build-system = setup;
dependencies = setup;
src = fetchPypi {
inherit pname version;
hash = "sha256-isCzF1XpOTSPsq8cwBw1fbUMhU+j1QbOeSGPwV8FaGg=";
};
}

View file

@ -0,0 +1,23 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.custom.anicli;
in
{
options = {
module.programs.custom.anicli = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ (callPackage ./anicli-ru.nix { }) ];
};
}

View file

@ -0,0 +1,22 @@
{ fetchPypi, python3Packages }:
python3Packages.buildPythonApplication rec {
pname = "eggella";
version = "0.1.7";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-8Vo39BePA86wcLKs/F+u2N7tpIpPrEyEPp3POszy050=";
};
build-system = with python3Packages; [
hatchling
setuptools
];
dependencies = with python3Packages; [
prompt-toolkit
rich
typer
];
}

View file

@ -0,0 +1,51 @@
{ buildFirefoxXpiAddon, lib }:
{
"torrserver-adder" = buildFirefoxXpiAddon {
pname = "torrserver-adder";
version = "2.0.5";
addonId = "84z74tXJKt8OUrTD@TSA";
url = "https://addons.mozilla.org/firefox/downloads/file/4264581/torrserver_adder-2.0.5.xpi";
sha256 = "6783c13fe423c14fbf9dd23ea3232167dc78eeb298594ab802aa9a7b094fb365";
meta = with lib; {
homepage = "https://github.com/Noperkot/TorrServerAdder";
description = "Allows you to add torrents to TorrServer and play them using the system media player";
license = licenses.mpl20;
mozPermissions = [
"http://*/*"
"https://*/*"
"contextMenus"
"downloads"
"storage"
"tabs"
"webRequest"
"webRequestBlocking"
];
platforms = platforms.all;
};
};
"proton-pass" = buildFirefoxXpiAddon {
pname = "proton-pass";
version = "1.24.1";
addonId = "78272b6fa58f4a1abaac99321d503a20@proton.me";
url = "https://addons.mozilla.org/firefox/downloads/file/4379392/proton_pass-1.24.1.xpi";
sha256 = "1290a7d3b91204fae8f392c8dd4b3f62e4fa0182ae98de1d0042280af744be80";
meta = with lib; {
homepage = "https://proton.me";
license = licenses.gpl3;
mozPermissions = [
"activeTab"
"alarms"
"scripting"
"storage"
"unlimitedStorage"
"webRequest"
"webRequestBlocking"
"https://*/*"
"http://*/*"
"https://account.proton.me/*"
"https://pass.proton.me/*"
];
platforms = platforms.all;
};
};
}

View file

@ -0,0 +1,82 @@
{
x,
pkgs,
lib,
config,
inputs,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.floorp;
customAddons = pkgs.callPackage ./addons.nix {
inherit (inputs.firefox-addons.lib."x86_64-linux") buildFirefoxXpiAddon;
};
in
{
options = {
module.programs.gui.floorp = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.floorp = True // {
profiles.${userName} = {
id = 0;
isDefault = true;
name = "${userName}";
extensions =
with inputs.firefox-addons.packages."x86_64-linux";
[
#VERY IMPORTANT
ublock-origin
sponsorblock
darkreader
vimium-c
censor-tracker
# MISC
tabcenter-reborn
firefox-color
stylus
translate-web-pages
]
++ (with customAddons; [ torrserver-adder ]);
};
policies = {
CaptivePortal = false;
DisableFirefoxStudies = true;
DisablePocket = true;
DisableTelemetry = true;
DisableFormHistory = true;
DisplayBookmarksToolbar = false;
DontCheckDefaultBrowser = true;
DisableProfileRefresh = true;
PromptForDownloadLocation = false;
NetworkPrediction = false;
showSearchBar = true;
DisableSetDesktopBackground = true;
LegacyProfiles = true;
ManualAppUpdateOnly = true;
DisableFirefoxScreenshots = true;
HardwareAcceleration = true;
PasswordManagerEnabled = true;
FirefoxHome = {
Pocket = false;
Snippets = false;
};
SanitizeOnShutdown = {
Cache = true;
History = false;
Cookies = false;
Downloads = true;
FormData = true;
Sessions = true;
OfflineApps = true;
};
};
};
};
}

View file

@ -0,0 +1,12 @@
{ x, ... }:
with x;
{
programs.floorp.profiles.${userName}.settings = {
# OTHER
"extensions.autoDisableScopes" = 0;
"layers.acceleration.force-enabled" = true;
"gfx.webrender.all" = true;
"svg.context-properties.content.enabled" = true;
"ui.key.menuAccessKeyFocuses" = false;
};
}

View file

@ -0,0 +1,14 @@
{ x, config, ... }:
with x;
{
programs.floorp.profiles.${userName}.userChrome =
let
font = config.stylix.fonts;
in
''
* {
font-family: "${font.monospace.name}" !important;
font-size: 12pt !important;
}
'';
}

View file

@ -0,0 +1,9 @@
{ x, ... }:
with x;
let
repo = "https://github.com/axax-loll/fuji-wallpapers/blob/main";
in
{
programs.floorp.profiles.${userName}.userContent =
" @-moz-document url(about:home), url(about:newtab), url(about:privatebrowsing) {\n .click-target-container *, .top-sites-list * {\n color: #fff !important ;\n text-shadow: 2px 2px 2px #222 !important ;\n }\n body::before {\n content: \"\" ;\n z-index: -1 ;\n position: fixed ;\n top: 0 ;\n left: 0 ;\n background: #0F0F0F no-repeat url(\"${repo}/synth.png?raw=true\") center ;\n background-size: cover ;\n width: 100vw ;\n height: 100vh ;\n }\n .logo { background-image: url(\"${repo}/logo.png?raw=true\") !important; }\n .search-wrapper input { background: #0F0F0F !important; }\n #PlacesToolbarItems {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n }\n";
}

View file

@ -0,0 +1,107 @@
:root {
/* These colours are (mainly) used by the
Container Tabs Plugin */
--uc-identity-colour-blue: #8DA3B9;
--uc-identity-colour-turquoise: #8AA6A2;
--uc-identity-colour-green: #8C977D;
--uc-identity-colour-yellow: #D9BC8C;
--uc-identity-colour-orange: #D9BC8C;
--uc-identity-colour-red: #B66467;
--uc-identity-colour-pink: #A988B0;
--uc-identity-colour-purple: #A988B0;
/* Cascades main Colour Scheme */
--uc-base-colour: #151515;
--uc-highlight-colour: #1F1F1F;
--uc-inverted-colour: #E8E3E3;
--uc-muted-colour: #BBB6B6;
--uc-accent-colour: var(--uc-identity-colour-purple);
--uc-shadow-colour: #151515;
}
#topmenu { display: none !important; }
#tablist-wrapper,
#pinnedtablist { background: var(--uc-base-colour); }
.tab:hover,
.tab.active { background: var(--uc-highlight-colour); }
#tablist-wrapper .tab-title-wrapper {
opacity: 0;
transform: translateX(-10px);
transition: all 200ms ease;
transition-delay: 0ms;
}
body:hover #tablist-wrapper .tab-title-wrapper {
opacity: 1;
transform: translateX(0);
transition-delay: 50ms;
}
.tab,
.tab.active { border-bottom: none !important; }
#pinnedtablist:not(.compact) .tab { padding: 6px; }
#tablist .tab { padding: 0 0 0 6px; }
.tab { overflow: visible; }
#pinnedtablist:not(.compact) .tab[data-identity-color] .tab-context::before,
#tablist .tab[data-identity-color] .tab-context::before {
position: absolute;
top: 4px; bottom: 4px;
width: 2px;
background: var(--identity-color);
content: '';
}
#tablist .tab[data-identity-color] .tab-context::before { left: -3px; }
#pinnedtablist:not(.compact) .tab .tab-pin,
.tab-close,
.tab-loading-burst { display: none; }
#pinnedtablist:not(.compact) .tab[data-identity-color] .tab-context { box-shadow: none !important; }
[data-identity-color="blue"] { --identity-color: var(--uc-identity-colour-blue); }
[data-identity-color="turquoise"] { --identity-color: var(--uc-identity-colour-turquoise); }
[data-identity-color="green"] { --identity-color: var(--uc-identity-colour-green); }
[data-identity-color="yellow"] { --identity-color: var(--uc-identity-colour-yellow); }
[data-identity-color="orange"] { --identity-color: var(--uc-identity-colour-orange); }
[data-identity-color="red"] { --identity-color: var(--uc-identity-colour-red); }
[data-identity-color="pink"] { --identity-color: var(--uc-identity-colour-pink); }
[data-identity-color="purple"] { --identity-color: var(--uc-identity-colour-purple); }
.can-scroll-top #tablist { mask: linear-gradient(transparent, var(--uc-shadow-colour) 40px); }
.can-scroll-bottom #tablist { mask: linear-gradient(var(--uc-shadow-colour) calc(100% - 40px), transparent); }
.can-scroll-bottom.can-scroll-top #tablist { mask: linear-gradient(transparent, var(--uc-shadow-colour) 40px calc(100% - 40px), transparent); }
#topshadow, #bottomshadow { display: none; }

View file

@ -0,0 +1,32 @@
{ x, ... }:
with x;
{
programs.floorp.profiles.${userName}.userChrome = ''
#TabsToolbar { display: none !important; }
#nav-bar { width: 100vw !important; }
#browser { position: relative; }
#sidebar-box[sidebarcommand*=\"tabcenter\"] #sidebar-header { display: none; }
#sidebar-box[sidebarcommand*=\"tabcenter\"]:not([hidden]) {
display: block;
position: absolute;
top: 0; bottom: 0;
z-index: 1;
min-width: 50px !important; max-width: 50px !important;
border-right: none;
transition: all 0.8s ease;
overflow: hidden;
}
[sidebarcommand*=\"tabcenter\"] #sidebar,
#sidebar-box[sidebarcommand*=\"tabcenter\"]:hover { min-width: 10vw !important; width: 30vw !important; max-width: 250px !important; }
[sidebarcommand*=\"tabcenter\"] #sidebar { height: 100%; max-height: 100%; }
#sidebar-box[sidebarcommand*=\"tabcenter\"]:not([hidden]) ~ #appcontent { margin-left: 50px; }
#main-window[inFullscreen][inDOMFullscreen] #appcontent { margin-left: 0; }
/* Removes gap between active tab highlight and edge of bar */
#sidebar-box[sidebarcommand=\"tabcenter-reborn_ariasuni-sidebar-action\"] #sidebar-header, #sidebar-box[sidebarcommand=\"tabcenter-reborn_ariasuni-sidebar-action\"] ~ #sidebar-splitter {
display: none;
}
'';
}

View file

@ -0,0 +1,46 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.minecraft;
jre = with pkgs; [
temurin-jre-bin-21
temurin-jre-bin-17
temurin-jre-bin-8
];
in
{
options = {
module.programs.gui.minecraft = {
enable = mkBool;
cli.enable = mkBool;
};
};
config = mkMerge [
(mkIf cfg.enable {
# BEST MINECRAFT LACUNHER
home.packages = with pkgs; [
(prismlauncher.override {
gamemodeSupport = true;
controllerSupport = true;
textToSpeechSupport = false;
jdks = jre;
})
];
})
(mkIf cfg.cli.enable {
# CLI LAUNCER
home.packages = with pkgs; [
portablemc
ferium
];
})
];
}

View file

@ -0,0 +1,51 @@
{
programs.mpv.bindings = {
WHEEL_UP = "add volume 2";
WHEEL_DOWN = "add volume -2";
"Shift+WHEEL_UP" = "add volume 5";
"Shift+WHEEL_DOWN" = "add volume -5";
RIGHT = "seek 5";
l = "seek 5";
"д" = "seek 5";
LEFT = "seek -5";
h = "seek -5";
"р" = "seek -5";
UP = "add volume 2";
k = "add volume 2";
"л" = "add volume 2";
DOWN = "add volume -2";
j = "add volume -2";
"о" = "add volume -2";
"Shift+RIGHT" = "seek 10";
"Shift+LEFT" = "seek -10";
"Shift+UP" = "add volume 5";
"Shift+DOWN" = "add volume -5";
q = "quit";
"й" = "quit";
Q = "quit-watch-later";
SPACE = "cycle pause";
p = "cycle pause";
"з" = "cycle pause";
m = "cycle mute";
"ь" = "cycle mute";
o = "show-progress";
"щ" = "show-progress";
f = "cycle fullscreen";
"а" = "cycle fullscreen";
ESC = "set fullscreen no";
"y" = "script-binding quality_menu/video_formats_toggle";
"н" = "script-binding quality_menu/video_formats_toggle";
};
}

View file

@ -0,0 +1,64 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
inherit (pkgs) mpvScripts;
cfg = config.module.programs.gui.mpv;
in
{
options = {
module.programs.gui.mpv = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.mpv = True // {
scripts = with mpvScripts; [
(quality-menu.override { oscSupport = true; })
sponsorblock-minimal
thumbnail
];
scriptOpts = {
sponsorblock-minimal = {
sponsorblock_minimal-server = "https://sponsor.ajay.app/api/skipSegments";
sponsorblock_minimal-categories = [ "sponsor" ];
};
mpv_thumbnail_script = {
autogenerate = "yes";
autogenerate_max_duration = "3600";
prefer_mpv = "yes";
mpv_no_sub = "no";
thumbnail_width = 200;
thumbnail_height = 200;
thumbnail_count = 150;
thumbnail_network = "no";
background_color = "282828";
};
};
config = {
fs = "yes";
osc = "no";
glsl-shaders =
with pkgs;
"${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl";
};
extraInput = with pkgs; ''
CTRL+1 no-osd change-list glsl-shaders set "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)"
CTRL+2 no-osd change-list glsl-shaders set "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_Soft_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)"
CTRL+3 no-osd change-list glsl-shaders set "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)"
CTRL+4 no-osd change-list glsl-shaders set "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_Restore_CNN_M.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)"
CTRL+5 no-osd change-list glsl-shaders set "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Restore_CNN_Soft_VL.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Restore_CNN_Soft_M.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)"
CTRL+6 no-osd change-list glsl-shaders set "${anime4k}/Anime4K_Clamp_Highlights.glsl:${anime4k}/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:${anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${anime4k}/Anime4K_Restore_CNN_M.glsl:${anime4k}/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)"
CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared"
'';
};
};
}

View file

@ -0,0 +1,30 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.obs;
in
{
options = {
module.programs.gui.obs = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.obs-studio = True // {
package = pkgs.obs-studio;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-vkcapture
input-overlay
];
};
};
}

View file

@ -0,0 +1,22 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui;
in
{
options = {
module.programs.gui = {
pkgs = mkOpt.list.pkgs;
};
};
config = {
home.packages = [ ] ++ cfg.pkgs;
};
}

View file

@ -0,0 +1,54 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.qbittorrent;
in
{
options = {
module.programs.gui.qbittorrent = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
xdg.configFile = {
# COLORSCHEME
"qBittorrent/themes/default/config.json".text = ''
{
"colors.dark": {
"Log.BannedPeer": "#b66467",
"Log.Critical": "#b66467",
"Log.Info": "#8da3b9",
"Log.TimeStamp": "#bbb6b6",
"Log.Warning": "#d9bc8c",
"TransferList.CheckingDownloading": "#8c977d",
"TransferList.CheckingResumeData": "#8c977d",
"TransferList.CheckingUploading": "#8c977d",
"TransferList.Downloading": "#d9bc8c",
"TransferList.DownloadingMetadata": "#d9bc8c",
"TransferList.Error": "#b66467",
"TransferList.ForcedDownloading": "#d9bc8c",
"TransferList.ForcedDownloadingMetadata": "#d9bc8c",
"TransferList.ForcedUploading": "#d9bc8c",
"TransferList.MissingFiles": "#b66467",
"TransferList.Moving": "#8aa6a2",
"TransferList.PausedDownloading": "#a988b0",
"TransferList.PausedUploading": "#a988b0",
"TransferList.QueuedDownloading": "#d9bc8c",
"TransferList.QueuedUploading": "#d9bc8c",
"TransferList.StalledDownloading": "#8c977d",
"TransferList.StalledUploading": "#bbb6b6",
"TransferList.Uploading": "#bbb6b6"
},
"version": 2
}
'';
};
};
}

View file

@ -0,0 +1,46 @@
{ pkgs, x, ... }:
with x;
let
translate =
with pkgs;
callPackage (
{ pkgs }:
stdenv.mkDerivation {
name = "qute-translate";
src = pkgs.fetchFromGitHub {
owner = "AckslD";
repo = "Qute-Translate";
rev = "cd2d201d17bb2d7490700b20d94495327af15e78";
sha256 = "sha256-xCbeEAw8a/5/ZD9+aB1J7FxLLBlP65kslGtpYGn3efs=";
};
installPhase = ''
install -Dm555 translate $out/translate
'';
}
) { };
in
{
home.packages = [ translate ];
programs.qutebrowser = True // {
keyBindings = {
normal = {
# j/k
"e" = "cmd-run-with-count 10 scroll down";
"E" = "cmd-run-with-count 10 scroll up";
# mpv
",m" = "spawn mpv {url}";
",M" = "hint links spawn mpv {hint-url}";
# qute pass
# zz = "${us} qute-pass";
# zu = "${us} qute-pass --username-only";
# zp = "${us} qute-pass --password-only";
# translate
",t" = "spawn --userscript ${translate}/translate -s en -t ru";
",T" = "hint links userscript ${translate}/translate";
};
caret = {
"t" = "spawn --userscript ${translate}/translate --text -s en -t ru";
};
};
};
}

View file

@ -0,0 +1,87 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.qutebrowser;
frc = lib.mkForce;
in
{
options = {
module.programs.gui.qutebrowser = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ python312Packages.adblock ];
programs.qutebrowser = True // {
settings = {
downloads.location = {
remember = true;
};
confirm_quit = [ "downloads" ];
scrolling = {
bar = "overlay";
smooth = true;
};
statusbar = {
show = "in-mode";
widgets = [
"keypress"
"search_match"
"url"
"tabs"
"progress"
"scroll"
];
};
tabs = {
show = "switching";
position = "top";
tooltips = false;
max_width = 250;
min_width = 250;
show_switching_delay = 500;
title = {
format = "{index}: {current_title}";
format_pinned = "{index}";
};
};
window.hide_decoration = true;
colors = with config.lib.stylix.colors.withHashtag; {
webpage = {
preferred_color_scheme = "dark";
# darkmode.enabled = true;
};
hints = {
bg = frc "${base04}";
fg = frc "${base00}";
};
};
fonts = with config.stylix.fonts; {
default_family = mkForce "${monospace.name}";
};
content = {
blocking.enabled = true;
javascript.clipboard = "access";
};
hints = {
scatter = false;
chars = "asdfghjkl";
};
};
searchEngines = {
DEFAULT = "https://www.google.com/search?hl=en&q={}";
nx = "https://wiki.nixos.org/index.php?search={}";
g = "https://www.google.com/search?hl=en&q={}";
d = "https://duckduckgo.com/?q={}";
};
};
};
}

View file

@ -0,0 +1,57 @@
{
pkgs,
config,
...
}:
{
programs.qutebrowser.greasemonkey =
with config.lib.stylix.colors;
let
inherit (pkgs) fetchurl writeText;
in
[
(fetchurl {
url = "https://raw.githubusercontent.com/afreakk/greasemonkeyscripts/refs/heads/master/youtube_sponsorblock.js";
sha256 = "sha256-nwNade1oHP+w5LGUPJSgAX1+nQZli4Rhe8FFUoF5mLE=";
})
(fetchurl {
url = "https://raw.githubusercontent.com/afreakk/greasemonkeyscripts/refs/heads/master/youtube_adblock.js";
sha256 = "sha256-AyD9VoLJbKPfqmDEwFIEBMl//EIV/FYnZ1+ona+VU9c=";
})
(writeText "darkreader.js" ''
// ==UserScript==
// @name Dark Reader (Unofficial)
// @icon https://darkreader.org/images/darkreader-icon-256x256.png
// @namespace DarkReader
// @description Inverts the brightness of pages to reduce eye strain
// @version 4.9.96
// @author https://github.com/darkreader/darkreader#contributors
// @homepageURL https://darkreader.org/ | https://github.com/darkreader/darkreader
// @run-at document-end
// @grant none
// @include http*
// @require https://cdn.jsdelivr.net/npm/darkreader/darkreader.min.js
// @noframes
// ==/UserScript==
DarkReader.enable({
darkSchemeBackgroundColor: "${base00}",
darkSchemeTextColor: "${base05}",
brightness: 60,
contrast: 80,
sepia: 0
});
'')
(writeText "darkmode.user.js" ''
// ==UserScript==
// @match *://*.google.com/maps/*
// @match *://www.youtube.com/*
// ==/UserScript==
const meta = document.createElement('meta');
meta.name = "color-scheme";
meta.content = "dark light";
document.head.appendChild(meta);
'')
];
}

View file

@ -0,0 +1,28 @@
{ pkgs, ... }:
{
config =
with pkgs;
(
let
qute-translate = callPackage (
{ pkgs }:
stdenv.mkDerivation rec {
name = "qute-translate";
src = pkgs.fetchFromGitHub {
owner = "AckslD";
repo = "Qute-Translate";
rev = "cd2d201d17bb2d7490700b20d94495327af15e78";
sha256 = "sha256-xCbeEAw8a/5/ZD9+aB1J7FxLLBlP65kslGtpYGn3efs=";
};
installPhase = "install -Dm555 translate $out/translate";
}
) { };
in
{
home.packages = [ qute-translate ];
programs.qutebrowser.keyBindings.normal.",t" = "spawn --userscript ${qute-translate}/translate";
}
);
}

View file

@ -0,0 +1,102 @@
{
x,
inputs,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
inherit (pkgs) system;
inherit (spicePkgs) extensions snippets;
cfg = config.module.programs.gui.spotify;
font = config.stylix.fonts;
spicePkgs = inputs.spicetify.legacyPackages.${system};
in
{
options = {
module.programs.gui.spotify = {
enable = mkBool;
};
};
imports = with inputs; [ spicetify.homeManagerModules.default ];
config = mkIf cfg.enable {
programs.spicetify = True // {
theme = spicePkgs.themes.sleek // {
additionalCss = ''
*{font-family:"${font.monospace.name}"!important}
'';
};
colorScheme = "custom";
customColorScheme = with config.lib.stylix.colors; {
# BASE 16 SCHEME
accent = "${base03}";
accent-active = "${base03}";
accent-inactive = "${base02}";
banner = "${base03}";
border-active = "${base03}";
border-inactive = "${base03}";
header = "${base00}";
highlight = "${base04}";
text = "${base06}";
subtext = "${base06}";
sidebar-text = "${base07}";
main = "${base00}";
sidebar = "${base01}";
player = "${base00}";
card = "${base00}";
shadow = "${base00}";
selected-row = "${base03}";
button = "${base0B}";
button-active = "${base0B}";
button-disabled = "${base03}";
tab-active = "${base04}";
notification = "${base0A}";
notification-error = "${base08}";
misc = "${base02}";
};
enabledExtensions = with extensions; [
# IMPORTANT
fullAppDisplay
betterGenres
keyboardShortcut
#COMMUNITY
adblockify
historyShortcut
beautifulLyrics
powerBar
seekSong
history
];
enabledSnippets = with snippets; [
fixLikedButton
smoothPlaylistRevealGradient
hideFriendActivityButton
centeredLyrics
pointer
removeConnectBar
fixedEpisodesIcon
fixProgressBar
roundedImages
fixMainViewWidth
fixPlaylistHover
hideNowPlayingViewButton
fixLikedIcon
removeTopSpacing
hideFriendsActivityButton
hideFullScreenButton
hideDownloadButton
hideMiniPlayerButton
leftAlignedHeartIcons
hideSidebarScrollbar
betterLyricsStyle
queueTopSidePanel
];
};
};
}

View file

@ -0,0 +1,202 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.swayimg;
font = config.stylix.fonts;
in
{
options = {
module.programs.gui.swayimg = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [ swayimg ];
xdg.configFile = with config.lib.stylix.colors.withHashtag; {
"swayimg/config".text = ''
[general]
mode = viewer
position = parent
size = fullscreen
sigusr1 = reload
sigusr2 = next_file
app_id = swayimg
[viewer]
window = #000000ff
transparency = grid
scale = optimal
fixed = yes
antialiasing = no
slideshow = no
slideshow_time = 3
history = 1
preload = 1
[gallery]
size = 400
cache = 100
fill = yes
antialiasing = yes
window = ${base00}ff
background = ${base01}ff
select = ${base02}ff
border = ${base0E}ff
shadow = ${base00}a0
[list]
order = alpha
loop = yes
recursive = no
all = yes
[font]
name = ${font.monospace.name}
size = 14
color = ${base06}ff
shadow = ${base00}a0
[info]
show = yes
info_timeout = 1
status_timeout = 1
[info.viewer]
top_left = +name,+imagesize
top_right = index
bottom_left = status
bottom_right = scale
[info.gallery]
top_left = none
top_right = index
bottom_left = none
bottom_right = none
[keys.viewer]
# help
F1 = help
Space = mode
Return = mode
# mv
t = exec mv "%" /persist/design/wallpapers; skip_file
# delete
Delete = exec trash put "%"; skip_file # trash
Shift+Delete = exec rm "%"; skip_file # delete
# first/last image
Home = first_file
g = first_file
End = last_file
Shift+g = last_file
# navigate
Shift+Space = next_file
Next = next_file
Prior = prev_file
# vi-keys
j = next_file
k = prev_file
# zoom
0 = zoom real
Equal = zoom +10
Plus = zoom +10
Minus = zoom -10
w = zoom width
Shift+w = zoom height
z = zoom fit
Shift+z = zoom fill
# vi-keys
h = zoom +10
l = zoom -10
# fs
# navigate in zoom
Left = step_left 10
Right = step_right 10
Up = step_up 10
Down = step_down 10
# rotate
bracketleft = rotate_left
bracketright = rotate_right
# flip
m = flip_vertical
Shift+m = flip_horizontal
# other
f = fullscreen
a = antialiasing
r = reload
i = info
q = exit
Escape = exit
# mouse
Ctrl+ScrollUp = zoom +10
Ctrl+ScrollDown = zoom -10
Shift+ScrollUp = prev_file
Shift+ScrollDown = next_file
[keys.gallery]
# help
F1 = help
Space = mode
Return = mode
# mv / copy
t = exec mv "%" /persist/design/wallpapers; skip_file
# first/last image
Home = first_file
g = first_file
End = last_file
Shift+g = last_file
# navigate
Left = step_left
Right = step_right
Up = step_up
Down = step_down
# vi-keys
h = step_left
j = step_down
k = step_up
l = step_right
# pages
Prior = page_up
Next = page_down
# other
f = fullscreen
a = antialiasing
r = reload
i = info
q = exit
Escape = exit
# delete
Delete = exec trash put "%"; skip_file # trash
Shift+Delete = exec rm "%"; skip_file # delete
# mouse
ScrollUp = page_up
ScrollDown = page_down
'';
};
};
}

View file

@ -0,0 +1,38 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.programs.gui.zed;
in
{
options = {
module.programs.gui.zed = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.zed-editor = True // {
extensions = [
"nix"
"city-lights"
];
userSettings = {
features = {
copilot = false;
};
telemetry = {
metrics = false;
};
vim_mode = true;
ui_font_size = 16;
buffer_font_size = 16;
};
};
};
}

View file

@ -0,0 +1,10 @@
{ x, lib, ... }:
with lib;
with x;
{
options = {
module.shells = {
abbrs = mkOpt.attrs.str;
};
};
}

View file

@ -0,0 +1,26 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.alias;
in
{
options = {
module.shells.alias = {
alias = mkOpt.attrs.str;
};
};
config = {
home = {
shellAliases = cfg.alias;
};
xdg.configFile."lutgen/paradise".text =
"151515 1F1F1F 2E2E2E 424242 BBB6B6 E8E3E3 E8E3E3 E8E3E3 B66467 D9BC8C D9BC8C 8C977D 8AA6A2 8DA3B9 A988B0 BBB6B6";
};
}

View file

@ -0,0 +1,20 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.bash;
in
{
options = {
module.shells.bash = {
enable = mkBool;
};
};
config = mkIf cfg.enable { programs.bash = False; };
}

View file

@ -0,0 +1,39 @@
{ ... }:
{
programs.fish =
let
# VARIABLES
col = "set fish_color";
pag = "set fish_pager_color";
sel = "${pag}_selected";
sec = "${pag}_secondary";
bol = "--bold";
ita = "--italics";
bg = "--background";
# COLORS
colors = ''
# COLORS
${col}_cancel ${bg}=red ${bol} black
${col}_comment gray
'';
pager = ''
# COMPLETIONS
${pag}_completion white
${sel}_completion black ${bol}
${sec}_completion white
${pag}_prefix white
${sel}_prefix black ${bol}
${pag}_description yellow ${ita}
${sel}_description black
${pag}_background black
${sel}_background ${bg}=green
${pag}_progress ${bg}=magenta black
'';
in
{
interactiveShellInit = ''
${colors}
${pager}
'';
};
}

View file

@ -0,0 +1,62 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.fish;
ani = config.module.programs.custom.anicli;
abbrs = config.module.shells.abbrs;
in
{
options = {
module.shells.fish = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.fish = True // {
package = pkgs.fish;
preferAbbrs = true;
shellAbbrs = abbrs;
interactiveShellInit = ''
set fish_greeting
'';
shellInitLast = ''
set fish_cursor_default block
set fish_cursor_insert line
set fish_cursor_replace_one underscore
set fish_cursor_replace underscore
set fish_cursor_visual block
set fish_cursor_external line
set -g tide_prompt_transient_enabled true
set -g tide_prompt_add_newline_before true
set -g tide_left_prompt_items pwd git newline character
set -g tide_right_prompt_items cmd_duration
set -g tide_cmd_duration_icon
set -g tide_cmd_duration_threshold 1000
set -g tide_pwd_icon_home "home of user ${userName}"
set -g tide_pwd_icon 󰋜
set -g tide_pwd_icon_unwritable 󰌾
set -g tide_pwd_transient_enabled true
set -g tide_pwd_color_truncated_dirs brblack
set -g tide_pwd_color_dirs blue
set -g tide_pwd_color_anchors blue
set -g tide_git_color_branch -o green
[ "$(tty)" = "/dev/tty1" ] && exec Hyprland # LAUNCH WM
'';
functions = mkIf ani.enable {
aniD = "anicli-ru --search $argv -s dreamcast";
aniG = "anicli-ru --search $argv -s animego";
};
};
};
}

View file

@ -0,0 +1,31 @@
{ pkgs, ... }:
with pkgs;
{
home.packages = [ grc ];
programs.fish.plugins = with fishPlugins; [
{
name = "grc";
src = grc.src;
}
{
name = "autopair";
src = autopair.src;
}
{
name = "fzf-fish";
src = fzf-fish.src;
}
{
name = "git-abbr";
src = git-abbr.src;
}
{
name = "puffer";
src = puffer.src;
}
{
name = "colored-man-pages";
src = colored-man-pages.src;
}
];
}

View file

@ -0,0 +1,64 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.nushell;
in
{
options = {
module.shells.nushell = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.nushell =
with pkgs;
True
// {
configFile.text = ''
$env.config = {
show_banner: false
edit_mode: vi
footer_mode: always
filesize: { metric: true }
ls: { clickable_links: false }
rm: { always_trash: true }
table: {
mode: compact_double
index_mode: always
header_on_separator: true
padding: { left: 2, right: 1 }
}
completions: {
algorithm: fuzzy
quick: true
case_sensitive: false
external: {
enable: true
max_results: 50
completer: { |spans| ${carapace}/bin/carapace $spans.0 nushell ...$spans | from json }
}
}
}
def llm [] { ls | sort-by modified }
def lls [ term: string ] { ls | where { |it| ($it.name | str contains $term ) } }
def pss [ term: string ] { ps | where { |it| ($it.name | str contains $term ) } }
def wy [ video_id: string ] { mpv $"https://youtube.com/watch?v=($video_id)" }
'';
envFile.text = ''
$env.EDITOR = "${helix}/bin/hx"
$env.BROWSER = "zen"
$env.XDG_CONFIG_HOME = $"($env.HOME)/.config"
$env.DIRENV_LOG_FORMAT = ""
'';
};
};
}

View file

@ -0,0 +1,87 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.starship;
in
{
options = {
module.shells.starship = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.starship = True // {
# enableFishIntegration = false;
enableTransience = true;
settings = {
add_newline = true;
right_format = concatStrings [ "$battery" ];
format = concatStrings [
"$username"
"$directory"
"$git_branch"
"$cmd_duration"
"$line_break"
"$character"
];
username = {
format = "[$user]($style) in ";
style_root = "bold red";
style_user = "bold purple";
show_always = true;
};
directory = {
format = "[$path]($style) [$read_only]($read_only_style)";
style = "bold fg:blue";
read_only = "[󰌾] ";
read_only_style = "bold red";
home_symbol = "own home";
truncation_length = 1;
truncation_symbol = "../";
};
git_branch = {
format = "on [$symbol$branch]($style) ";
style = "bold italic fg:green";
symbol = " ";
truncation_length = 8;
truncation_symbol = "";
};
git_metrics = {
format = "[+$added]($added_style)/[-$deleted]($deleted_style) ";
added_style = "bold fg:green";
deleted_style = "bold fg:red";
};
cmd_duration = {
min_time = 1000;
format = "[$duration](bold fg:yellow)";
};
character = {
format = "$symbol ";
success_symbol = "[](bold green)";
error_symbol = "[](bold red)";
vimcmd_symbol = "[N](bold green)";
vimcmd_replace_one_symbol = "[R](bold purple)";
vimcmd_replace_symbol = "[R](bold purple)";
vimcmd_visual_symbol = "[V](bold yellow)";
};
battery = (
mkIf (is == "desktop") {
format = "[$symbol$percentage]($style)";
full_symbol = "󰁹";
charging_symbol = "󰂄";
discharging_symbol = "󰂃";
unknown_symbol = "󰁽";
empty_symbol = "󰂎";
}
);
};
};
};
}

View file

@ -0,0 +1,35 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.tmux;
in
{
options = {
module.shells.tmux = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.tmux = True // {
shell = pkgs: "${fish}/bin/fish";
clock24 = true;
keyMode = "vi";
disableConfirmationPrompt = true;
customPaneNavigationAndResize = true;
prefix = "C-a";
shortcut = "a";
extraConfig = ''
set -g status-position bottom
set -g status-style bg=color0
'';
};
};
}

View file

@ -0,0 +1,22 @@
{ ... }:
{
home.sessionVariables = {
TERM = "kitty";
TERMINAL = "kitty";
FILE_MANAGER = "yazi";
MICRO_TRUECOLOR = "1";
MOZ_ENABLE_WAYLAND = "1";
RANGER_LOAD_DEFAULT_RC = "false";
# FFF FILE MANAGER
FFF_HIDDEN = "1";
FFF_LS_COLORS = "1";
FFF_COL1 = "1";
FFF_COL2 = "0";
FFF_COL3 = "2";
FFF_COL4 = "6";
FFF_COL5 = "7";
};
}

View file

@ -0,0 +1,87 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.shells.zsh;
abbrs = config.module.shells.abbrs;
in
{
options = {
module.shells.zsh = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
programs.zsh =
with pkgs;
True
// {
# COOL TOOLS YEYE
syntaxHighlighting = True;
enableCompletion = true;
autosuggestion = True;
# SETS
dotDir = ".config/zsh";
completionInit = "autoload -U compinit && compinit";
# CONFIGURATION
zsh-abbr = True // {
abbreviations = abbrs;
};
initExtra =
let
completion = {
default = ''
zstyle ':completion:*' rehash true
zstyle ':completion:*' menu select
zstyle ':completion:*:git-checkout:*' sort false
zstyle ':completion::complete:*' gain-privileges 1
'';
fzf-tab = ''
zstyle ':completion:*' menu no
zstyle ':fzf-tab:*' fzf-command fzf
zstyle ':fzf-tab:*' fzf-pad 4
zstyle ':fzf-tab:*' fzf-flags --color=fg:1,fg+:2,gutter:-1 \
--height=60% \
--margin=0,30%,0,0 \
--padding=0 \
--no-mouse --border rounded \
--prompt "Prompt: " \
--pointer "->" \
--info hidden
zstyle ':fzf-tab:*' switch-group '<' '>'
zstyle ':fzf-tab:*' switch-group F1 F2
zstyle ':fzf-tab:*' fzf-bindings 'space:accept'
zstyle ':fzf-tab:*' accept-line enter
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always \
--icons always \
$realpath'
'';
};
settings = {
default = ''
autoload -U colors && colors
setopt sharehistory
setopt automenu
setopt nobeep
fpath=(${zsh-completions}/share/zsh/site-functions $fpath)
'';
};
in
''
# COMPLETION
${completion.fzf-tab}
# ZSH SETTINGS
${settings.default}
# BINDINGS
${builtins.readFile ./keymap}
'';
};
};
}

View file

@ -0,0 +1,49 @@
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
key[Insert]="${terminfo[kich1]}"
key[Backspace]="${terminfo[kbs]}"
key[Delete]="${terminfo[kdch1]}"
key[Up]="${terminfo[kcuu1]}"
key[Down]="${terminfo[kcud1]}"
key[Left]="${terminfo[kcub1]}"
key[Right]="${terminfo[kcuf1]}"
key[PageUp]="${terminfo[kpp]}"
key[PageDown]="${terminfo[knp]}"
key[Shift-Tab]="${terminfo[kcbt]}"
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
autoload -Uz add-zle-hook-widget
function zle_application_mode_start { echoti smkx }
function zle_application_mode_stop { echoti rmkx }
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
fi
# HISTORY MOVEMENT
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
# CTRL MOVEMENT
key[Control-Left]="${terminfo[kLFT5]}"
key[Control-Right]="${terminfo[kRIT5]}"
[[ -n "${key[Control-Left]}" ]] && bindkey -- "${key[Control-Left]}" backward-word
[[ -n "${key[Control-Right]}" ]] && bindkey -- "${key[Control-Right]}" forward-word

View file

@ -0,0 +1,67 @@
{ x, pkgs, ... }:
with x;
{
programs.zsh = with pkgs; {
oh-my-zsh = True // {
plugins = [
"git"
"eza"
"colored-man-pages"
];
};
plugins =
let
s = "share";
rev = "main";
in
[
# FROM REPO
# {
# name = "zsh-powerlevel10k";
# file = "${s}/zsh-powerlevel10k/powerlevel10k.zsh-theme";
# src = zsh-powerlevel10k;
# }
{
name = "zsh-fzf-tab";
file = "${s}/fzf-tab/fzf-tab.plugin.zsh";
src = zsh-fzf-tab;
}
{
name = "zsh-autopair";
file = "${s}/zsh/zsh-autopair/autopair.zsh";
src = zsh-autopair;
}
# FROM GITHUB
# {
# name = "zsh-allclear";
# file = "zsh-allclear.plugin.zsh";
# src = fetchFromSourcehut {
# owner = "~azikx";
# repo = "zsh_helix";
# sha256 = "sha256-vIPkP1soUtnMcwTlwiTP68AwI3DpkMuj614afS37IIs=";
# inherit rev;
# };
# }
{
name = "eza-zsh";
file = "eza-zsh.plugin.zsh";
src = fetchFromGitHub {
owner = "MohamedElashri";
repo = "eza-zsh";
sha256 = "sha256-ee56D48unp/Bm1EA2/pYYYJZ8Fdtbu0LsUGHfGlRNK8=";
inherit rev;
};
}
{
name = "helix-mode";
file = "helix-mode.zsh";
src = fetchFromGitHub {
owner = "allomanta";
repo = "zsh-helix-mode";
rev = "f5e6cb94fa77f5fa0762b9b2c7c818e8ae87d22e";
hash = "sha256-oDRk9JK5agM1Izc6FWf+i6bRKhK3uohG9Cnco3dJwP8=";
};
}
];
};
}

View file

@ -0,0 +1,47 @@
{
x,
pkgs,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.themes.gtk;
font = config.stylix.fonts;
extra = {
gtk-application-prefer-dark-theme = 1;
gtk-xft-antialias = 1;
gtk-xft-hinting = 1;
gtk-xft-hintstyle = "hintslight";
gtk-xft-rgba = "rgb";
gtk-button-images = 0;
gtk-menu-images = 0;
gtk-enable-event-sounds = 1;
gtk-enable-input-feedback-sounds = 0;
};
in
{
options = {
module.themes.gtk = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
noto-fonts
noto-fonts-cjk-sans
];
gtk = True // {
gtk3.extraConfig = extra;
gtk4.extraConfig = extra;
font = mkForce {
size = 12;
name = "${font.monospace.name}";
package = font.monospace.package;
};
};
};
}

View file

@ -0,0 +1,21 @@
{
config,
...
}:
{
xdg.configFile =
let
mk = {
text = with config.lib.stylix.colors; ''
[ColorScheme]
active_colors=#ff${base05}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff${base05}, #ff${base06}, #ff${base05}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff${base05}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff${base0E}, #8f${base0E}
inactive_colors=#ff${base04}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff${base04}, #ff${base04}, #ff${base04}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff${base05}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff${base0E}, #8f${base0E}
disabled_colors=#ff${base02}, #ff${base01}, #ff${base01}, #ff${base05}, #ff${base03}, #ff${base04}, #ff${base02}, #ff${base0F}, #ff${base0F}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base02}, #ff${base05}, #ff${base09}, #ff${base08}, #ff${base02}, #ff${base05}, #ff${base01}, #ff${base0F}, #8f${base0F}
'';
};
in
{
"qt5ct/colors/stylix.conf" = mk;
"qt6ct/colors/stylix.conf" = mk;
};
}

View file

@ -0,0 +1,24 @@
{
x,
lib,
config,
...
}:
with lib;
with x;
let
cfg = config.module.themes.qt;
in
{
options = {
module.themes.qt = {
enable = mkBool;
};
};
config = mkIf cfg.enable {
qt = True // {
platformTheme.name = "qtct";
};
};
}

View file

@ -0,0 +1,55 @@
{
pkgs,
config,
...
}:
let
inherit (config.home) homeDirectory;
font = config.stylix.fonts;
icon = config.stylix.iconTheme;
mk =
package: name:
let
st = "${toString package}/share/${name}/qss";
in
''
[Appearance]
color_scheme_path=${homeDirectory}/.config/${name}/colors/stylix.conf
custom_palette=true
icon_theme=${icon.dark}
standard_dialogs=default
style=Fusion
[Fonts]
fixed="${font.monospace.name},${toString font.sizes.applications},-1,5,50,0,0,0,0,0,Regular"
general="${font.monospace.name},${toString font.sizes.applications},-1,5,50,0,0,0,0,0,Regular"
[Interface]
activate_item_on_single_click=1
buttonbox_layout=0
cursor_flash_time=1000
dialog_buttons_have_icons=1
double_click_interval=400
gui_effects=@Invalid()
keyboard_scheme=2
menus_have_icons=false
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
stylesheets=${st}/fusion-fixes.qss,${st}/scrollbar-simple.qss,${st}/sliders-simple.qss,${st}/tooltip-simple.qss,${st}/traynotification-simple.qss
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()
'';
in
{
xdg.configFile =
let
inherit (pkgs.libsForQt5) qt5ct;
inherit (pkgs) qt6ct;
in
{
"qt5ct/qt5ct.conf".text = mk qt5ct "qt5ct";
"qt6ct/qt6ct.conf".text = mk qt6ct "qt6ct";
};
}

View file

@ -0,0 +1,122 @@
{
x,
pkgs,
lib,
config,
inputs,
...
}:
with lib;
with x;
let
cfg = config.module.themes.stylix;
wal = inputs.design;
a = (
oldAttrs: {
installPhase = ''
runHook preInstall
dst_opentype=$out/share/fonts/opentype/NerdFonts
dst_truetype=$out/share/fonts/truetype/NerdFonts
find -name \*.otf -exec mkdir -p $dst_opentype \; -exec cp -p {} $dst_opentype \;
find -name \*.ttf -exec mkdir -p $dst_truetype \; -exec cp -p {} $dst_truetype \;
runHook postInstall
'';
}
);
in
{
options = {
module.themes.stylix = {
enable = mkBool;
image = mkOpt.str;
icon = mkOpt.str;
cursor = {
bg = mkOpt.str;
ol = mkOpt.str;
ac = mkOpt.str;
};
};
};
imports = with inputs; [ stylix.homeManagerModules.stylix ];
config = mkIf cfg.enable {
home.packages =
with pkgs;
with nerd-fonts;
[
corefonts
(tinos.overrideAttrs a)
(monaspace.overrideAttrs a)
(space-mono.overrideAttrs a)
(code-new-roman.overrideAttrs a)
(dejavu-sans-mono.overrideAttrs a)
];
stylix = True // {
autoEnable = false;
base16Scheme = "${wal}/base16/${x.theme}.yaml";
image = "${wal}/wallpapers/paradise/${x.image}.jpg";
cursor = with inputs.cursors.packages.${pkgs.system}; {
size = 16;
name = "GoogleDot-Custom";
package = google-cursor.override {
background_color = cfg.cursor.bg;
outline_color = cfg.cursor.ol;
accent_color = cfg.cursor.ac;
};
};
iconTheme = True // {
dark = "Papirus-Dark";
light = "Papirus-Light";
package = pkgs.papirus-icon-theme.override { color = cfg.icon; };
};
fonts = with config.stylix.fonts; {
monospace = {
name = "JetBrainsMono Nerd Font";
package = with pkgs.nerd-fonts; (jetbrains-mono.overrideAttrs a);
};
serif = monospace;
emoji = monospace;
sizes = {
desktop = 10;
popups = 10;
applications = 12;
terminal = 12;
};
};
targets = {
# CLI
tmux = True;
cava = True // {
rainbow = True;
};
fish = True;
nushell = True;
# WM
hyprland = True // {
hyprpaper = True;
};
hyprpaper = True;
sway = True;
river = True;
# MISC PROGRAMS
foot = True;
kitty = True;
mako = False;
rofi = True;
bemenu = True;
# TOOLS
nixvim = True;
yazi = True;
fzf = True;
bat = True;
mangohud = True;
# GUI
spicetify = False;
vesktop = True;
qutebrowser = True;
firefox = True;
gtk = True;
};
};
};
}

View file

@ -0,0 +1,40 @@
{ pkgs, config, ... }:
{
# THIS MODULE NEED FOR GET AN WALLPAPER
# TROUGH LUTGEN WITH YOUR COLORSCHEME
stylix = with pkgs; {
image =
let
cfg = config.module.themes.stylix;
img = fetchurl {
url = cfg.image;
sha256 = cfg.hash;
};
in
runCommand "output.png" { } ''
${lutgen}/bin/lutgen apply ${img} -o $out -- ${
builtins.concatStringsSep " " (
with config.lib.stylix.colors;
[
base00
base01
base02
base03
base04
base05
base06
base07
base08
base09
base0A
base0B
base0C
base0D
base0E
base0F
]
)
}
'';
};
}

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