Implemented custom system for creating and distributing color schemes based on wallpapers, and also cycling through wallpapers.

nixfmt'd the codebase
This commit is contained in:
2026-03-09 22:02:46 -04:00
parent 4308b8eb16
commit 8ee748a997
145 changed files with 2776 additions and 1125 deletions

View File

@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="535"
height="535"
viewBox="0 0 501.56251 501.56249"
id="svg2"
version="1.1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
sodipodi:docname="nix-snowflake-colours.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient5562">
<stop
style="stop-color:#699ad7;stop-opacity:1"
offset="0"
id="stop5564" />
<stop
id="stop5566"
offset="0.24345198"
style="stop-color:#7eb1dd;stop-opacity:1" />
<stop
style="stop-color:#7ebae4;stop-opacity:1"
offset="1"
id="stop5568" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient5053">
<stop
style="stop-color:#415e9a;stop-opacity:1"
offset="0"
id="stop5055" />
<stop
id="stop5057"
offset="0.23168644"
style="stop-color:#4a6baf;stop-opacity:1" />
<stop
style="stop-color:#5277c3;stop-opacity:1"
offset="1"
id="stop5059" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5562"
id="linearGradient4328"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(70.650339,-1055.1511)"
x1="200.59668"
y1="351.41116"
x2="290.08701"
y2="506.18814" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient5053"
id="linearGradient4330"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(864.69589,-1491.3405)"
x1="-584.19934"
y1="782.33563"
x2="-496.29703"
y2="937.71399" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.70904368"
inkscape:cx="99.429699"
inkscape:cy="195.33352"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1050"
inkscape:window-x="1920"
inkscape:window-y="30"
inkscape:window-maximized="1"
inkscape:snap-global="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="2"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="gradient-logo"
style="display:inline;opacity:1"
transform="translate(-156.41121,933.30685)">
<g
id="g2"
transform="matrix(0.99994059,0,0,0.99994059,-0.06321798,33.188377)"
style="stroke-width:1.00006">
<path
sodipodi:nodetypes="cccccccccc"
inkscape:connector-curvature="0"
id="path3336-6"
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
style="opacity:1;fill:url(#linearGradient4328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<use
height="100%"
width="100%"
transform="rotate(60,407.11155,-715.78724)"
id="use3439-6"
inkscape:transform-center-y="151.59082"
inkscape:transform-center-x="124.43045"
xlink:href="#path3336-6"
y="0"
x="0"
style="stroke-width:1.00006" />
<use
height="100%"
width="100%"
transform="rotate(-60,407.31177,-715.70016)"
id="use3445-0"
inkscape:transform-center-y="75.573958"
inkscape:transform-center-x="-168.20651"
xlink:href="#path3336-6"
y="0"
x="0"
style="stroke-width:1.00006" />
<use
height="100%"
width="100%"
transform="rotate(180,407.41868,-715.7565)"
id="use3449-5"
inkscape:transform-center-y="-139.94592"
inkscape:transform-center-x="59.669705"
xlink:href="#path3336-6"
y="0"
x="0"
style="stroke-width:1.00006" />
<path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
id="path4260-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<use
height="100%"
width="100%"
transform="rotate(120,407.33916,-716.08356)"
id="use4354-5"
xlink:href="#path4260-0"
y="0"
x="0"
style="display:inline;stroke-width:1.00006" />
<use
height="100%"
width="100%"
transform="rotate(-120,407.28823,-715.86995)"
id="use4362-2"
xlink:href="#path4260-0"
y="0"
x="0"
style="display:inline;stroke-width:1.00006" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@@ -14,6 +14,11 @@ def watch_hyprland():
threading.Thread(target=watch_hyprland, daemon=True).start() threading.Thread(target=watch_hyprland, daemon=True).start()
dev = None
def is_target_window():
return active_class == "kitty" or active_class == "neovide" or active_class == "discord" or active_class == "vesktop" or active_class == "firefox"
for path in evdev.list_devices(): for path in evdev.list_devices():
d = evdev.InputDevice(path) d = evdev.InputDevice(path)
if 'keyd virtual keyboard' in d.name: if 'keyd virtual keyboard' in d.name:
@@ -21,16 +26,15 @@ for path in evdev.list_devices():
break break
d.close() d.close()
print(dev) if dev != None:
for event in dev.read_loop():
for event in dev.read_loop(): if event.type == 1 and event.value == 1 and is_target_window():
if event.type == 1 and event.value == 1 and active_class == "kitty": if event.code == 28:
if event.code == 28: subprocess.Popen(['pw-play', '/home/pagedmov/.sysflake/assets/sound/msg_finish.wav'])
subprocess.Popen(['pw-play', '/home/pagedmov/.sysflake/assets/sound/msg_finish.wav']) elif event.code == 14:
elif event.code == 14: subprocess.Popen(['pw-cat', '--playback', '--volume=0.5', '/home/pagedmov/.sysflake/assets/sound/low_hp.wav'])
subprocess.Popen(['pw-cat', '--playback', '--volume=0.5', '/home/pagedmov/.sysflake/assets/sound/low_hp.wav']) elif event.code == 1:
elif event.code == 1: subprocess.Popen(['pw-play', '/home/pagedmov/.sysflake/assets/sound/menu_close.wav'])
subprocess.Popen(['pw-play', '/home/pagedmov/.sysflake/assets/sound/menu_close.wav']) else:
else: pitch = random.randint(-50,50)
pitch = random.randint(-50,50) subprocess.Popen(['play', '-q', '/home/pagedmov/.sysflake/assets/sound/msg.wav', 'pitch', str(pitch)])
subprocess.Popen(['play', '-q', '/home/pagedmov/.sysflake/assets/sound/msg.wav', 'pitch', str(pitch)])

Binary file not shown.

After

Width:  |  Height:  |  Size: 602 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

50
flake.lock generated
View File

@@ -107,11 +107,11 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1772928715, "lastModified": 1773005383,
"narHash": "sha256-Z7qGN/5v7oBc6wjNtSR7YI/JneEzPvCqd+P6RAxMltA=", "narHash": "sha256-Nlln9sKJa1q5lYX4xXS34Lt1oREwgQbT59Aa37nBGkU=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "ffe6a9aa6fb7d49a4a1be3007c8d3297f88f4bc8", "rev": "266d6e0ae6a6eecac7bc863bd8f746d16686e61a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -125,11 +125,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1772867152, "lastModified": 1773025010,
"narHash": "sha256-RIFgZ4O6Eg+5ysZ8Tqb3YvcqiRaNy440GEY22ltjRrs=", "narHash": "sha256-khlHllTsovXgT2GZ0WxT4+RvuMjNeR5OW0UYeEHPYQo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "eaafb89b56e948661d618eefd4757d9ea8d77514", "rev": "7b9f7f88ab3b339f8142dc246445abb3c370d3d3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -309,11 +309,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772845525, "lastModified": 1773093840,
"narHash": "sha256-Dp5Ir2u4jJDGCgeMRviHvEQDe+U37hMxp6RSNOoMMPc=", "narHash": "sha256-u/96NoAyN8BSRuM3ZimGf7vyYgXa3pLx4MYWjokuoH4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "27b93804fbef1544cb07718d3f0a451f4c4cd6c0", "rev": "bb014746edb2a98d975abde4dd40fa240de4cf86",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -415,11 +415,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1772913214, "lastModified": 1773082851,
"narHash": "sha256-/tzDJr3CcM73Y4ZQmoFYSzNDs7RV7+enE72tvl+Fm0E=", "narHash": "sha256-4zkUP+gZF6zveHFN0W3oX750mpVgxfiShL+ZcvcH244=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "a4ecae91600d7e8ceb31610176d6b40cb816711b", "rev": "e32eeb1d454b029a24ca71f410896bf52839085d",
"revCount": 7006, "revCount": 7010,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -749,11 +749,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1772173633, "lastModified": 1772771118,
"narHash": "sha256-MOH58F4AIbCkh6qlQcwMycyk5SWvsqnS/TCfnqDlpj4=", "narHash": "sha256-xWzaTvmmACR/SRWtABgI/Z97lcqwJAeoSd5QW1KdK1s=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c0f3d81a7ddbc2b1332be0d8481a672b4f6004d6", "rev": "e38213b91d3786389a446dfce4ff5a8aaf6012f2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -813,11 +813,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1772736753, "lastModified": 1772956932,
"narHash": "sha256-au/m3+EuBLoSzWUCb64a/MZq6QUtOV8oC0D9tY2scPQ=", "narHash": "sha256-M0yS4AafhKxPPmOHGqIV0iKxgNO8bHDWdl1kOwGBwRY=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "917fec990948658ef1ccd07cef2a1ef060786846", "rev": "608d0cadfed240589a7eea422407a547ad626a14",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -964,11 +964,11 @@
"nixpkgs": "nixpkgs_8" "nixpkgs": "nixpkgs_8"
}, },
"locked": { "locked": {
"lastModified": 1772939073, "lastModified": 1773107703,
"narHash": "sha256-Fl451e4T94L1dUPjs5HEAbh/gP3vXFQBk9b52tW486Y=", "narHash": "sha256-Zf2Z7p2tEC+HjIqVoEyd/bLypqUdNdkNCuAg4OnNcIg=",
"owner": "km-clay", "owner": "km-clay",
"repo": "shed", "repo": "shed",
"rev": "07d7015dd4950833671f2b795e2559295601e5af", "rev": "85e5fc28754849ce690ff583249381f9c7a91fb9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -985,11 +985,11 @@
"systems": "systems_5" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1772494187, "lastModified": 1773007504,
"narHash": "sha256-6ksgNAFXVK+Cg/6ww7bB2nJUPZlnS75UwZC7G+L03EE=", "narHash": "sha256-4NtiCDH3RunKbrlWvPCB6dyTjCwqdrHaBDeMCzG6gIA=",
"owner": "gerg-l", "owner": "gerg-l",
"repo": "spicetify-nix", "repo": "spicetify-nix",
"rev": "915ab06b046d05613041780c575c62a32fe67cea", "rev": "434e63b851f9139aaeddc3b8de44d47992828b3b",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -30,7 +30,8 @@
}; };
}; };
outputs = { ... }@inputs: outputs =
{ ... }@inputs:
let let
movLib = import ./lib { movLib = import ./lib {
inherit inputs; inherit inputs;
@@ -73,7 +74,8 @@
]; ];
} }
]; ];
in { in
{
inherit (hosts) nixosConfigurations homeConfigurations; inherit (hosts) nixosConfigurations homeConfigurations;
}; };
} }

View File

@@ -1,4 +1,9 @@
{ inputs, pkgs, username, ... }: {
inputs,
pkgs,
username,
...
}:
let let
shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default; shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default;
@@ -31,8 +36,14 @@ in
}; };
environment = { environment = {
variables = { PATH = "${pkgs.clang-tools}/bin:$PATH"; }; variables = {
shells = [ pkgs.myPkgs.slash pkgs.zsh pkgs.bash ]; PATH = "${pkgs.clang-tools}/bin:$PATH";
};
shells = [
pkgs.myPkgs.slash
pkgs.zsh
pkgs.bash
];
}; };
users = { users = {
@@ -43,7 +54,12 @@ in
isNormalUser = true; isNormalUser = true;
initialPassword = "1234"; initialPassword = "1234";
shell = shed; shell = shed;
extraGroups = [ "input" "wheel" "persist" "libvirtd" ]; extraGroups = [
"input"
"wheel"
"persist"
"libvirtd"
];
}; };
}; };
}; };

View File

@@ -1,28 +1,44 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
]; ];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sr_mod" "virtio_blk" ]; boot.initrd.availableKernelModules = [
"ahci"
"xhci_pci"
"virtio_pci"
"virtio_scsi"
"sr_mod"
"virtio_blk"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/5d8dd8ba-6c4c-4227-adc5-f33bf0022fff"; device = "/dev/disk/by-uuid/5d8dd8ba-6c4c-4227-adc5-f33bf0022fff";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/6A3C-0A12"; device = "/dev/disk/by-uuid/6A3C-0A12";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
}; "fmask=0022"
"dmask=0022"
];
};
swapDevices = [ ]; swapDevices = [ ];

View File

@@ -1,7 +1,7 @@
{ username, ... }: { { username, ... }:
{
home.username = "${username}"; home.username = "${username}";
home.homeDirectory = home.homeDirectory = "/home/${username}";
"/home/${username}";
home.stateVersion = "25.05"; home.stateVersion = "25.05";
programs.home-manager.enable = true; programs.home-manager.enable = true;
@@ -14,7 +14,10 @@
envConfig = { envConfig = {
hyprlandConfig = { hyprlandConfig = {
enable = true; enable = true;
monitorNames = [ "HDMI-A-1" "DP-1" ]; monitorNames = [
"HDMI-A-1"
"DP-1"
];
workspaceLayout = "dualmonitor"; workspaceLayout = "dualmonitor";
}; };
userPkgs.enable = true; userPkgs.enable = true;

View File

@@ -1,10 +1,21 @@
{ username, pkgs, config, ... }: { {
username,
pkgs,
config,
...
}:
{
imports = [ ./hardware.nix ]; imports = [ ./hardware.nix ];
boot = { boot = {
kernelModules = [ "acpi_call" ]; kernelModules = [ "acpi_call" ];
extraModulePackages = with config.boot.kernelPackages; extraModulePackages =
[ acpi_call cpupower ] ++ [ pkgs.cpupower-gui ]; with config.boot.kernelPackages;
[
acpi_call
cpupower
]
++ [ pkgs.cpupower-gui ];
}; };
movOpts = { movOpts = {
@@ -27,9 +38,19 @@
}; };
environment = { environment = {
variables = { PATH = "${pkgs.clang-tools}/bin:$PATH"; }; variables = {
shells = with pkgs; [ zsh bash ]; PATH = "${pkgs.clang-tools}/bin:$PATH";
systemPackages = with pkgs; [ acpi brightnessctl cpupower-gui powertop ]; };
shells = with pkgs; [
zsh
bash
];
systemPackages = with pkgs; [
acpi
brightnessctl
cpupower-gui
powertop
];
}; };
users = { users = {
@@ -40,7 +61,11 @@
isNormalUser = true; isNormalUser = true;
initialPassword = "1234"; initialPassword = "1234";
shell = pkgs.zsh; shell = pkgs.zsh;
extraGroups = [ "wheel" "persist" "libvirtd" ]; extraGroups = [
"wheel"
"persist"
"libvirtd"
];
}; };
}; };
}; };

View File

@@ -1,11 +1,24 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: { {
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = boot.initrd.availableKernelModules = [
[ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; "nvme"
"xhci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
@@ -23,7 +36,10 @@
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/sda2"; device = "/dev/sda2";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [
"fmask=0077"
"dmask=0077"
];
}; };
fileSystems."/home" = { fileSystems."/home" = {
@@ -42,6 +58,5 @@
# networking.interfaces.wlp15s0.useDHCP = lib.mkDefault true; # networking.interfaces.wlp15s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@@ -1,9 +1,17 @@
{ host, pkgs, self, inputs, username, lib, config, ... }: { {
host,
pkgs,
self,
inputs,
username,
lib,
config,
...
}:
{
home.username = "${username}"; # Replace with your actual username home.username = "${username}"; # Replace with your actual username
home.homeDirectory = home.homeDirectory = "/home/${username}"; # Replace with your actual home directory
"/home/${username}"; # Replace with your actual home directory home.stateVersion = "24.05"; # Adjust this based on your system's NixOS version
home.stateVersion =
"24.05"; # Adjust this based on your system's NixOS version
programs.home-manager.enable = true; programs.home-manager.enable = true;

View File

@@ -1,4 +1,5 @@
{ pkgs, username, ... }: { { pkgs, username, ... }:
{
imports = [ ./hardware.nix ]; imports = [ ./hardware.nix ];
movOpts = { movOpts = {
sysEnv = { sysEnv = {
@@ -22,7 +23,12 @@
caddyConfig.enable = true; caddyConfig.enable = true;
}; };
}; };
networking.firewall = { allowedTCPPorts = [ 443 8920 ]; }; networking.firewall = {
allowedTCPPorts = [
443
8920
];
};
environment = { environment = {
etc."tmpfiles.d/home-permissions.conf".text = '' etc."tmpfiles.d/home-permissions.conf".text = ''
d /home/pagedmov 0750 pagedmov users - d /home/pagedmov 0750 pagedmov users -
@@ -31,7 +37,10 @@
PATH = "${pkgs.clang-tools}/bin:$PATH"; PATH = "${pkgs.clang-tools}/bin:$PATH";
TERM = "kitty"; TERM = "kitty";
}; };
shells = with pkgs; [ zsh bash ]; shells = with pkgs; [
zsh
bash
];
}; };
users = { users = {
@@ -42,7 +51,11 @@
isNormalUser = true; isNormalUser = true;
initialPassword = "1234"; initialPassword = "1234";
shell = pkgs.zsh; shell = pkgs.zsh;
extraGroups = [ "wheel" "persist" "libvirtd" ]; extraGroups = [
"wheel"
"persist"
"libvirtd"
];
}; };
}; };
}; };

View File

@@ -1,13 +1,25 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules = boot.initrd.availableKernelModules = [
[ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; "nvme"
"xhci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
@@ -25,7 +37,10 @@
fileSystems."/boot" = { fileSystems."/boot" = {
device = "/dev/disk/by-uuid/357E-BCCD"; device = "/dev/disk/by-uuid/357E-BCCD";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [
"fmask=0077"
"dmask=0077"
];
}; };
fileSystems."/home" = { fileSystems."/home" = {
@@ -44,6 +59,5 @@
# networking.interfaces.wlp11s0.useDHCP = lib.mkDefault true; # networking.interfaces.wlp11s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@@ -1,10 +1,18 @@
{ host, pkgs, self, inputs, lib, username, config, ... }: { {
host,
pkgs,
self,
inputs,
lib,
username,
config,
...
}:
{
home.username = "${username}"; home.username = "${username}";
home.homeDirectory = home.homeDirectory = "/home/${username}";
"/home/${username}"; home.stateVersion = "24.05";
home.stateVersion =
"24.05";
programs.home-manager.enable = true; programs.home-manager.enable = true;

View File

@@ -1,4 +1,9 @@
{ inputs, pkgs, username, ... }: {
inputs,
pkgs,
username,
...
}:
let let
shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default; shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default;
@@ -33,8 +38,14 @@ in
}; };
environment = { environment = {
variables = { PATH = "${pkgs.clang-tools}/bin:$PATH"; }; variables = {
shells = [ pkgs.myPkgs.slash pkgs.zsh pkgs.bash ]; PATH = "${pkgs.clang-tools}/bin:$PATH";
};
shells = [
pkgs.myPkgs.slash
pkgs.zsh
pkgs.bash
];
}; };
programs.shed.enable = true; programs.shed.enable = true;
@@ -52,7 +63,13 @@ in
isNormalUser = true; isNormalUser = true;
initialPassword = "1234"; initialPassword = "1234";
shell = pkgs.shed; shell = pkgs.shed;
extraGroups = [ "davfs2" "input" "wheel" "persist" "libvirtd" ]; extraGroups = [
"davfs2"
"input"
"wheel"
"persist"
"libvirtd"
];
}; };
}; };
}; };

View File

@@ -1,4 +1,9 @@
{ slash, pkgs, username, ... }: {
slash,
pkgs,
username,
...
}:
let let
kickstartServer = kickstartServer =
@@ -17,30 +22,31 @@ let
''; '';
}; };
startTf2Server = pkgs.writeShellScript "start-srv.sh" '' startTf2Server = pkgs.writeShellScript "start-srv.sh" ''
set -euo pipefail set -euo pipefail
export HOME=/home/tf2 export HOME=/home/tf2
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32 export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
mkdir -p "$HOME/tf2server" mkdir -p "$HOME/tf2server"
mkdir -p "$HOME/tf2server" mkdir -p "$HOME/tf2server"
steamcmd +force_install_dir "$HOME/tf2server" \ steamcmd +force_install_dir "$HOME/tf2server" \
+login anonymous \ +login anonymous \
+app_update 232250 validate \ +app_update 232250 validate \
+quit +quit
cd "$HOME/tf2server" cd "$HOME/tf2server"
ln -sf "$HOME/.steam/steam/linux64" "$HOME/.steam/sdk64" ln -sf "$HOME/.steam/steam/linux64" "$HOME/.steam/sdk64"
ln -sf "$HOME/.steam/steam/linux32" "$HOME/.steam/sdk32" ln -sf "$HOME/.steam/steam/linux32" "$HOME/.steam/sdk32"
exec ./srcds_run -game tf -console -port 25565 +map cp_dustbowl \ exec ./srcds_run -game tf -console -port 25565 +map cp_dustbowl \
+ip 10.233.1.2 -norestart \ +ip 10.233.1.2 -norestart \
+sv_setsteamaccount 8862FD4B30F401036B8AAC6A7FE6B123 +sv_setsteamaccount 8862FD4B30F401036B8AAC6A7FE6B123
''; '';
in in
pkgs.buildFHSEnv { pkgs.buildFHSEnv {
name = "srcds-env"; name = "srcds-env";
targetPkgs = pkgs: with pkgs; [ targetPkgs =
pkgs: with pkgs; [
steamcmd steamcmd
glibc glibc
zlib zlib
@@ -50,29 +56,30 @@ let
libnl libnl
libsrcds libsrcds
# Optional: link compat # Optional: link compat
stdenv.cc.cc.lib stdenv.cc.cc.lib
]; ];
multiPkgs = pkgs: with pkgs.pkgsi686Linux; [ multiPkgs =
glibc pkgs: with pkgs.pkgsi686Linux; [
zlib glibc
ncurses5 zlib
libuuid ncurses5
alsa-lib libuuid
libxcrypt-legacy alsa-lib
gcc libxcrypt-legacy
]; gcc
multiArch = true; ];
runScript = "${startTf2Server}"; multiArch = true;
runScript = "${startTf2Server}";
}; };
in in
{ {
networking = { networking = {
nat = { nat = {
enable = true; enable = true;
internalInterfaces = ["ve-+"]; internalInterfaces = [ "ve-+" ];
externalInterface = "enp8s0"; externalInterface = "enp8s0";
}; };
}; };
containers.tf2server = { containers.tf2server = {
@@ -84,7 +91,6 @@ in
imports = [ ]; imports = [ ];
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
services.openssh.enable = true; services.openssh.enable = true;
users.users.root.password = "root"; # For quick login, remove in prod users.users.root.password = "root"; # For quick login, remove in prod
@@ -114,11 +120,19 @@ in
}; };
}; };
nix.settings.experimental-features = [ "nix-command" "flakes" ]; nix.settings.experimental-features = [
"nix-command"
"flakes"
];
# Optional: open ports on the container # Optional: open ports on the container
networking.firewall.allowedTCPPorts = [ 25565 ]; networking.firewall.allowedTCPPorts = [ 25565 ];
networking.firewall.allowedUDPPorts = [ 25565 27005 27015 27020 ]; networking.firewall.allowedUDPPorts = [
25565
27005
27015
27020
];
system.stateVersion = "25.11"; # or your NixOS version system.stateVersion = "25.11"; # or your NixOS version
}; };

View File

@@ -1,41 +1,68 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
pkgs,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "ahci" "uas" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules = [
"xhci_pci"
"nvme"
"ahci"
"uas"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ]; boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/9a98748d-1953-4316-9788-07d11c5d0af6"; device = "/dev/disk/by-uuid/9a98748d-1953-4316-9788-07d11c5d0af6";
fsType = "btrfs"; fsType = "btrfs";
options = [ "subvol=root" "compress=zstd:3" "noatime" ]; options = [
}; "subvol=root"
"compress=zstd:3"
"noatime"
];
};
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/5BA1-A9F8"; device = "/dev/disk/by-uuid/5BA1-A9F8";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
}; "fmask=0022"
"dmask=0022"
];
};
fileSystems."/home" = fileSystems."/home" = {
{ device = "/dev/disk/by-uuid/00fd7a7c-d916-4a61-abc1-8dde26b4413b"; device = "/dev/disk/by-uuid/00fd7a7c-d916-4a61-abc1-8dde26b4413b";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd:3" "noatime" ]; options = [
}; "compress=zstd:3"
"noatime"
];
};
fileSystems."/nix" = fileSystems."/nix" = {
{ device = "/dev/disk/by-uuid/7c03499c-e2a7-4352-8797-a21f094ef90b"; device = "/dev/disk/by-uuid/7c03499c-e2a7-4352-8797-a21f094ef90b";
fsType = "btrfs"; fsType = "btrfs";
options = [ "compress=zstd:3" "noatime" ]; options = [
}; "compress=zstd:3"
"noatime"
];
};
swapDevices = [ ]; swapDevices = [ ];

View File

@@ -1,7 +1,7 @@
{ username, ... }: { { username, ... }:
{
home.username = "${username}"; home.username = "${username}";
home.homeDirectory = home.homeDirectory = "/home/${username}";
"/home/${username}";
home.stateVersion = "25.05"; home.stateVersion = "25.05";
programs.home-manager.enable = true; programs.home-manager.enable = true;
@@ -14,7 +14,10 @@
envConfig = { envConfig = {
hyprlandConfig = { hyprlandConfig = {
enable = true; enable = true;
monitorNames = [ "DP-3" "DP-1" ]; monitorNames = [
"DP-3"
"DP-1"
];
workspaceLayout = "dualmonitor"; workspaceLayout = "dualmonitor";
}; };
userPkgs.enable = true; userPkgs.enable = true;

View File

@@ -1,14 +1,29 @@
{ inputs, username, nixpkgsConfig ? { allowUnfree = true; } }: {
inputs,
username,
nixpkgsConfig ? {
allowUnfree = true;
},
}:
rec { rec {
mkHost = import ./mk_host.nix; mkHost = import ./mk_host.nix;
foldHosts = hosts: inputs.nixpkgs.lib.foldl' foldHosts =
(acc: host: hosts:
let result = mkHost ({ inherit inputs username nixpkgsConfig; } // host); inputs.nixpkgs.lib.foldl'
in { (
nixosConfigurations = acc.nixosConfigurations // result.nixosConfigurations; acc: host:
homeConfigurations = acc.homeConfigurations // result.homeConfigurations; let
}) result = mkHost ({ inherit inputs username nixpkgsConfig; } // host);
{ nixosConfigurations = {}; homeConfigurations = {}; } in
hosts; {
nixosConfigurations = acc.nixosConfigurations // result.nixosConfigurations;
homeConfigurations = acc.homeConfigurations // result.homeConfigurations;
}
)
{
nixosConfigurations = { };
homeConfigurations = { };
}
hosts;
} }

View File

@@ -1,15 +1,17 @@
{ {
inputs, inputs,
username, username,
nixpkgsConfig ? { allowUnfree = true; }, nixpkgsConfig ? {
allowUnfree = true;
},
host, host,
hostDir, hostDir,
system ? "x86_64-linux", system ? "x86_64-linux",
kind, kind,
extraNixosModules ? [], extraNixosModules ? [ ],
extraHomeModules ? [], extraHomeModules ? [ ],
extraOverlays ? [], extraOverlays ? [ ],
overlay ? true overlay ? true,
}: }:
let let
@@ -17,19 +19,31 @@ let
../hosts/${hostDir}/config.nix ../hosts/${hostDir}/config.nix
../modules/sys ../modules/sys
inputs.stylix.nixosModules.stylix inputs.stylix.nixosModules.stylix
] ++ extraNixosModules; ]
++ extraNixosModules;
homeModules = [ homeModules = [
../hosts/${hostDir}/home.nix ../hosts/${hostDir}/home.nix
../modules/home ../modules/home
inputs.stylix.homeModules.stylix inputs.stylix.homeModules.stylix
inputs.nixvim.homeModules.nixvim inputs.nixvim.homeModules.nixvim
] ++ extraHomeModules; ]
++ extraHomeModules;
pkgs = import inputs.nixpkgs { pkgs = import inputs.nixpkgs {
inherit system; inherit system;
config = nixpkgsConfig; config = nixpkgsConfig;
overlays = extraOverlays ++ (if overlay then [ overlays =
(import ../overlay/overlay.nix { inherit host; root = inputs.self; }) extraOverlays
] else []); ++ (
if overlay then
[
(import ../overlay/overlay.nix {
inherit host;
root = inputs.self;
})
]
else
[ ]
);
}; };
specialArgs = { specialArgs = {
inherit inputs username host; inherit inputs username host;
@@ -55,7 +69,8 @@ let
else else
null; null;
in in
{ {
nixosConfigurations = if kind == "nixos" || kind == "both" then { ${host} = nixosCfg; } else {}; nixosConfigurations = if kind == "nixos" || kind == "both" then { ${host} = nixosCfg; } else { };
homeConfigurations = if kind == "home" || kind == "both" then { ${host + "Home"} = homeCfg; } else {}; homeConfigurations =
} if kind == "home" || kind == "both" then { ${host + "Home"} = homeCfg; } else { };
}

View File

@@ -1,3 +1,18 @@
{ env, inputs, nixpkgs, config, self, username, host, lib, ... }: { {
imports = [ ./programs ./environment ./files.nix ]; env,
inputs,
nixpkgs,
config,
self,
username,
host,
lib,
...
}:
{
imports = [
./programs
./environment
./files.nix
];
} }

View File

@@ -1,4 +1,14 @@
{ host, nixvim, self, inputs, username, config, home-manager, ... }: { {
host,
nixvim,
self,
inputs,
username,
config,
home-manager,
...
}:
{
imports = [ imports = [
./gtk.nix ./gtk.nix
./spicetify.nix ./spicetify.nix
@@ -6,10 +16,11 @@
./userservices.nix ./userservices.nix
./starship.nix ./starship.nix
./userpkgs.nix ./userpkgs.nix
./zsh
./shed
./swaync.nix ./swaync.nix
./hyprland.nix ./hyprland.nix
./waybar.nix ./waybar.nix
./zsh
./shed
./paperd
]; ];
} }

View File

@@ -1,16 +1,20 @@
{ lib, config, pkgs, ... }: { {
lib,
config,
pkgs,
...
}:
{
options = { options = {
movOpts.envConfig.gtkConfig.enable = movOpts.envConfig.gtkConfig.enable = lib.mkEnableOption "enable my gtk options";
lib.mkEnableOption "enable my gtk options";
}; };
config = lib.mkIf config.movOpts.envConfig.gtkConfig.enable { config = lib.mkIf config.movOpts.envConfig.gtkConfig.enable {
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
home.packages = with pkgs; home.packages = with pkgs; [
[ nerd-fonts.jetbrains-mono
nerd-fonts.jetbrains-mono nerd-fonts.symbols-only
nerd-fonts.symbols-only cascadia-code
cascadia-code ];
];
gtk = { gtk = {
enable = true; enable = true;

View File

@@ -1,34 +1,46 @@
{ inputs, pkgs, lib, config, self, host, ... }: {
inputs,
pkgs,
lib,
config,
self,
host,
...
}:
let let
desktop = host == "oganesson" || host == "phosphorous"; desktop = host == "oganesson" || host == "phosphorous";
screenshot_bind = if desktop then screenshot_bind =
[ if desktop then
"super, print, exec, grimblast copy area" [
"super shift, print, exec, grimblast --freeze copy area" "super, print, exec, grimblast copy area"
] "super shift, print, exec, grimblast --freeze copy area"
else ]
[ else
# My laptop does not have a printscreen button [
"super, insert, exec, grimblast copy area" # My laptop does not have a printscreen button
]; "super, insert, exec, grimblast copy area"
];
scheme = config.lib.stylix.colors; scheme = config.lib.stylix.colors;
mons = config.movOpts.envConfig.hyprlandConfig.monitorNames; mons = config.movOpts.envConfig.hyprlandConfig.monitorNames;
smartGapsWorkspaces = [ #smartGapsWorkspaces = [
"w[tv1], gapsout:0, gapsin:0" #"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0" #"f[1], gapsout:0, gapsin:0"
]; #];
smartGapsWindowrules = [ #smartGapsWindowrules = [
"border_size 0, match:float 0, match:workspace w[tv1]" #"border_size 0, match:float 0, match:workspace w[tv1]"
"rounding 0, match:float 0, match:workspace w[tv1]" #"rounding 0, match:float 0, match:workspace w[tv1]"
"border_size 0, match:float 0, match:workspace f[1]" #"border_size 0, match:float 0, match:workspace f[1]"
"rounding 0, match:float 0, match:workspace f[1]" #"rounding 0, match:float 0, match:workspace f[1]"
]; #];
hostWorkspaces = if (host == "phosphorous") then hostWorkspaces =
[ if (host == "phosphorous") then
"m[DP-3], layoutopt:orientation:top" [
] "m[DP-3], layoutopt:orientation:top"
else []; ]
in { else
[ ];
in
{
options = { options = {
movOpts.envConfig.hyprlandConfig = { movOpts.envConfig.hyprlandConfig = {
@@ -41,7 +53,10 @@ in {
type = lib.types.listOf lib.types.str; type = lib.types.listOf lib.types.str;
# The order of the monitor names matters for the purpose of workspace assignment # The order of the monitor names matters for the purpose of workspace assignment
# For instance, in a dual monitor setup, index 0 gets 4,5 and 6, while index 1 gets 1,2 and 3 # For instance, in a dual monitor setup, index 0 gets 4,5 and 6, while index 1 gets 1,2 and 3
default = [ "DP-1" "HDMI-A-1" ]; default = [
"DP-1"
"HDMI-A-1"
];
}; };
}; };
}; };
@@ -58,23 +73,32 @@ in {
wayland wayland
direnv direnv
]; ];
systemd.user.targets.hyprland-session.Unit.Wants = systemd.user.targets.hyprland-session.Unit.Wants = [ "xdg-desktop-autostart.target" ];
[ "xdg-desktop-autostart.target" ];
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
xwayland = { enable = true; }; xwayland = {
enable = true;
};
systemd.enable = true; systemd.enable = true;
extraConfig = ''
source = ~/.local/state/sysflake/hyprland-colors.conf
'';
}; };
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
settings = { settings = {
monitor = if (host == "oganesson") then [ monitor =
"DP-1, 1920x1080@144, 1920x0, 1" if (host == "oganesson") then
"HDMI-A-1, 1920x1080, 0x0, 1" [
] else if (host == "phosphorous") then [ "DP-1, 1920x1080@144, 1920x0, 1"
"DP-1, highrr, 0x0, 1" "HDMI-A-1, 1920x1080, 0x0, 1"
"DP-3, highrr, -1080x-420, 1, transform, 3" ]
] else else if (host == "phosphorous") then
[ "eDP-1, 1600x900, 0x0, 1" ]; [
"DP-1, highrr, 0x0, 1"
"DP-3, highrr, -1080x-420, 1, transform, 3"
]
else
[ "eDP-1, 1600x900, 0x0, 1" ];
exec-once = [ exec-once = [
"waybar &" "waybar &"
@@ -87,26 +111,37 @@ in {
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &" "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &"
]; ];
workspace = hostWorkspaces ++ (if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then [ workspace =
"1,persistent=true,monitor:${builtins.elemAt mons 0}" hostWorkspaces
"2,persistent=true,monitor:${builtins.elemAt mons 0}" ++ (
"3,persistent=true,monitor:${builtins.elemAt mons 0}" if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then
"4,persistent=true,monitor:${builtins.elemAt mons 1}" [
"5,persistent=true,monitor:${builtins.elemAt mons 1}" "1,persistent=true,monitor:${builtins.elemAt mons 0}"
"6,persistent=true,monitor:${builtins.elemAt mons 1}" "2,persistent=true,monitor:${builtins.elemAt mons 0}"
] else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "singlemonitor") then [ "3,persistent=true,monitor:${builtins.elemAt mons 0}"
"1,persistent=true,monitor:${builtins.elemAt mons 0} " "4,persistent=true,monitor:${builtins.elemAt mons 1}"
"2,persistent=true,monitor:${builtins.elemAt mons 0}" "5,persistent=true,monitor:${builtins.elemAt mons 1}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}" "6,persistent=true,monitor:${builtins.elemAt mons 1}"
"4,persistent=true,monitor:${builtins.elemAt mons 0}" ]
] else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "trimonitor") then [ else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "singlemonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 0} "
"2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 0}"
]
else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "trimonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 2}" "1,persistent=true,monitor:${builtins.elemAt mons 2}"
"2,persistent=true,monitor:${builtins.elemAt mons 2}" "2,persistent=true,monitor:${builtins.elemAt mons 2}"
"3,persistent=true,monitor:${builtins.elemAt mons 1}" "3,persistent=true,monitor:${builtins.elemAt mons 1}"
"4,persistent=true,monitor:${builtins.elemAt mons 1}" "4,persistent=true,monitor:${builtins.elemAt mons 1}"
"5,persistent=true,monitor:${builtins.elemAt mons 0}" "5,persistent=true,monitor:${builtins.elemAt mons 0}"
"6,persistent=true,monitor:${builtins.elemAt mons 0}" "6,persistent=true,monitor:${builtins.elemAt mons 0}"
] else [ ]) ++ smartGapsWorkspaces; ]
else
[ ]
);
env = [ env = [
"XDG_CONFIG_HOME,$HOME/.config" "XDG_CONFIG_HOME,$HOME/.config"
@@ -114,38 +149,38 @@ in {
"XDG_CACHE_HOME,$HOME/.cache" "XDG_CACHE_HOME,$HOME/.cache"
]; ];
layerrule = [ layerrule = [
"match:namespace = waybar, blur 1" "blur on, ignore_alpha 0, match:namespace waybar"
"match:namespace = waybar, ignore_alpha 0"
"match:namespace = launcher, blur 1" "match:namespace = launcher, blur 1"
]; ];
windowrule = [ windowrule = [
# From old windowrulev2 # From old windowrulev2
"float true, match:class ^(thunar)$, match:title ^(.*File Operation Progress.*)$" "float true, match:class ^(thunar)$, match:title ^(.*File Operation Progress.*)$"
"float true, match:class ^(firefox)$, match:title ^(Library)$" "float true, match:class ^(firefox)$, match:title ^(Library)$"
"float true, match:class ^(thunar)$, match:title ^(File Operation Progress)$" "float true, match:class ^(thunar)$, match:title ^(File Operation Progress)$"
"float true, match:class ^(thunar)$, match:title ^(Confirm to replace files)$" "float true, match:class ^(thunar)$, match:title ^(Confirm to replace files)$"
"float true, match:title ^(bwarn)$" "float true, match:title ^(bwarn)$"
"no_initial_focus on, match:class ^(steam)$" "no_initial_focus on, match:class ^(steam)$"
"float true, match:class ^(firefox)$, match:title ^( - Google Mozilla Firefox)$" "float true, match:class ^(firefox)$, match:title ^( - Google Mozilla Firefox)$"
"float true, match:class ^(firefox)$, match:title ^(Firefox Sharing Indicator)$" "float true, match:class ^(firefox)$, match:title ^(Firefox Sharing Indicator)$"
"float true, match:class ^(firefox)$, match:title ^(Firefox )$" "float true, match:class ^(firefox)$, match:title ^(Firefox )$"
"float true, match:class ^(firefox)$, match:title ^(.*Sign in.*)$" "float true, match:class ^(firefox)$, match:title ^(.*Sign in.*)$"
# From old windowrule # From old windowrule
"float true, match:class ^(qt5ct)$" "float true, match:class ^(qt5ct)$"
"float true, match:class ^(zoom)$" "float true, match:class ^(zoom)$"
"float true, match:class ^(Steam)$" "float true, match:class ^(Steam)$"
"idle_inhibit focus, match:class ^(mpv)$" "idle_inhibit focus, match:class ^(mpv)$"
"float true, match:title ^(Picture-in-Picture)$" "float true, match:title ^(Picture-in-Picture)$"
"float true, match:class ^(nm-connection-editor)$" "float true, match:class ^(nm-connection-editor)$"
"float true, match:class ^(waypaper)$" "float true, match:class ^(waypaper)$"
"float true, match:title ^(Sign In)(.*)$" "float true, match:title ^(Sign In)(.*)$"
"float true, match:title ^(Firefox )$" "float true, match:title ^(Firefox )$"
"no_focus on, match:title ^(Firefox )$" "no_focus on, match:title ^(Firefox )$"
"float true, match:class ^(firefox)$, match:title ^(Sign in - Google Accounts Mozilla Firefox)$" "float true, match:class ^(firefox)$, match:title ^(Sign in - Google Accounts Mozilla Firefox)$"
"size 0 0, match:title ^(Firefox )$" "size 0 0, match:title ^(Firefox )$"
"move 100%-470 15, match:title ^(Firefox Sharing Indicator)$" "opacity 0.8, match:title ^(Neovide)$"
"move 100%-470 15, match:title ^(Firefox )$" "move 100%-470 15, match:title ^(Firefox Sharing Indicator)$"
] ++ smartGapsWindowrules; "move 100%-470 15, match:title ^(Firefox )$"
];
cursor = { cursor = {
no_hardware_cursors = true; no_hardware_cursors = true;
@@ -154,24 +189,24 @@ in {
input = { input = {
kb_layout = "us"; kb_layout = "us";
follow_mouse = 1; follow_mouse = 1;
accel_profile = "flat"; follow_mouse_threshold = 5;
force_no_accel = 1; force_no_accel = 1;
sensitivity = 0; sensitivity = 0;
}; };
general = { general = {
gaps_in = 5; gaps_in = 5;
gaps_out = "0, 9, 9, 9"; # top, right, bottom, left gaps_out = "0, 9, 9, 9"; # top, right, bottom, left
border_size = 3; border_size = 3;
"col.active_border" = lib.mkForce "rgba(404042ff)"; "col.active_border" = lib.mkForce "rgba(404042ff)";
"col.inactive_border" = lib.mkForce "rgba(83858a00)"; "col.inactive_border" = lib.mkForce "rgba(83858a00)";
layout = "master"; layout = "master";
resize_on_border = true; resize_on_border = true;
snap = { snap = {
enabled = true; enabled = true;
window_gap = 5; window_gap = 5;
}; };
}; };
misc = { misc = {
font_family = "EnvyCodeR Nerd Font Mono"; font_family = "EnvyCodeR Nerd Font Mono";
disable_autoreload = true; disable_autoreload = true;
@@ -188,7 +223,6 @@ in {
}; };
dwindle = { dwindle = {
force_split = 2;
pseudotile = "yes"; pseudotile = "yes";
preserve_split = "yes"; preserve_split = "yes";
}; };
@@ -203,83 +237,92 @@ in {
decoration = { decoration = {
rounding = 4; rounding = 4;
blur = {
enabled = true;
size = 8;
passes = 2;
};
shadow = { shadow = {
enabled = true; enabled = true;
ignore_window = true; ignore_window = true;
range = 80; range = 20;
render_power = 50; render_power = 50;
}; };
}; };
cursor = { cursor = {
hide_on_key_press = true; hide_on_key_press = true;
}; };
animations = { animations = {
enabled = true; enabled = true;
bezier = [ bezier = [
"myBezier, 0.16, 1, 0.3, 1" "myBezier, 0.16, 1, 0.3, 1"
]; ];
animation = [ animation = [
"windows, 1, 7, myBezier, popin 80%" "windows, 1, 7, myBezier, popin 80%"
"fade, 1, 7, myBezier" "fade, 1, 7, myBezier"
"workspaces, 1, 6, myBezier, slidefade 80%" "workspaces, 1, 6, myBezier, slidefade 80%"
]; ];
}; };
bind = [ bind = [
"super, up, exec, pactl set-sink-volume @default_sink@ +10%" "super, up, exec, pactl set-sink-volume @default_sink@ +10%"
"super, down, exec, pactl set-sink-volume @default_sink@ -10%" "super, down, exec, pactl set-sink-volume @default_sink@ -10%"
"super, t, exec, swaync-client -t -sw" "super, t, exec, swaync-client -t -sw"
"super, a, exec, firefox" "super, a, exec, firefox"
"super, q, exec, kitty" "super, q, exec, kitty"
"super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty" "super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty"
"super, c, killactive," "super, c, killactive,"
"super shift, c,exec, hyprctl kill" "super shift, c,exec, hyprctl kill"
"super, e, exec, [float;size 40% 50%;move onscreen cursor -50% -50%] nemo" "super, e, exec, [float;size 40% 50%;move onscreen cursor -50% -50%] nemo"
"super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt" "super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt"
"super shift, m, exit," "super shift, m, exit,"
"super, m, exec, fuzzel" "super, m, exec, fuzzel"
"super, r, exec, neovide" "super, r, exec, neovide"
"super, b, layoutmsg, togglesplit, # dwindle" "super, b, layoutmsg, togglesplit, # dwindle"
"super, comma, layoutmsg, rollnext" # comma "super, comma, exec, hyprctl dispatch layoutmsg rollnext; hyprctl dispatch layoutmsg focusmaster"
"super, period, layoutmsg, rollprev" "super, period, exec, hyprctl dispatch layoutmsg rollprev; hyprctl dispatch layoutmsg focusmaster"
"super, n, layoutmsg, swapwithmaster" "super, n, layoutmsg, swapwithmaster"
"super, f, togglefloating" "super, f, togglefloating"
"super, g, fullscreen" "super, g, fullscreen"
"super, h, movefocus, l" "super, h, movefocus, l"
"super, l, movefocus, r" "super, l, movefocus, r"
"super, k, movefocus, u" "super, k, movefocus, u"
"super, j, movefocus, d" "super, j, movefocus, d"
"super, y, exec, /home/pagedmov/splitman-ipc.sh start" "super, y, exec, /home/pagedmov/splitman-ipc.sh start"
"super, u, exec, /home/pagedmov/splitman-ipc.sh split" "super, u, exec, /home/pagedmov/splitman-ipc.sh split"
"super, i, exec, /home/pagedmov/splitman-ipc.sh stop" "super, i, exec, /home/pagedmov/splitman-ipc.sh stop"
"super, o, exec, /home/pagedmov/splitman-ipc.sh pause" "super, o, exec, /home/pagedmov/splitman-ipc.sh pause"
"super shift, h, movewindow, l" "super shift, h, movewindow, l"
"super shift, l, movewindow, r" "super shift, l, movewindow, r"
"super shift, k, movewindow, u" "super shift, k, movewindow, u"
"super shift, j, movewindow, d" "super shift, j, movewindow, d"
"super, d, exec, switchmon" "super, d, exec, switchmon"
"super, 1, exec, hyprctl 'dispatch workspace 1'" "super, 1, exec, hyprctl 'dispatch workspace 1'"
"super, 2, exec, hyprctl 'dispatch workspace 2'" "super, 2, exec, hyprctl 'dispatch workspace 2'"
"super, 3, exec, hyprctl 'dispatch workspace 3'" "super, 3, exec, hyprctl 'dispatch workspace 3'"
"super, 4, exec, hyprctl 'dispatch workspace 4'" "super, 4, exec, hyprctl 'dispatch workspace 4'"
"super, 5, exec, hyprctl 'dispatch workspace 5'" "super, 5, exec, hyprctl 'dispatch workspace 5'"
"super, 6, exec, hyprctl 'dispatch workspace 6'" "super, 6, exec, hyprctl 'dispatch workspace 6'"
"super shift, 1, movetoworkspace, 1" "super shift, 1, movetoworkspace, 1"
"super shift, 2, movetoworkspace, 2" "super shift, 2, movetoworkspace, 2"
"super shift, 3, movetoworkspace, 3" "super shift, 3, movetoworkspace, 3"
"super shift, 4, movetoworkspace, 4" "super shift, 4, movetoworkspace, 4"
"super shift, 5, movetoworkspace, 5" "super shift, 5, movetoworkspace, 5"
"super shift, 6, movetoworkspace, 6" "super shift, 6, movetoworkspace, 6"
"super, s, togglespecialworkspace, magic" "super, s, togglespecialworkspace, magic"
"super shift, s, movetoworkspace, special:magic" "super shift, s, movetoworkspace, special:magic"
] ++ screenshot_bind; ]
bindm = ++ screenshot_bind;
[ "super, mouse:272, movewindow" "super, mouse:273, resizewindow" ]; bindm = [
"super, mouse:272, movewindow"
"super, mouse:273, resizewindow"
];
}; };
}; };
}; };

View File

@@ -0,0 +1,6 @@
{ ... }:
{
imports = [
./paperd.nix
];
}

View File

@@ -0,0 +1,35 @@
{
self,
pkgs,
lib,
...
}:
let
paperdScript = import ./paperd_script.nix { inherit pkgs; };
in
{
home.file.".config/paperd/config.toml".text = ''
wallpaper_dir = "${self}/assets/wallpapers/selective_color"
interval = 1800
[transition]
type = "fade"
duration = 3
fps = 60
'';
systemd.user.services = {
paperd = {
Unit = {
Description = "Paperd Wallpaper Daemon";
After = [ "swww-daemon.service" ];
Requires = [ "swww-daemon.service" ];
};
Install.WantedBy = [ "hyprland-session.target" ];
Service = {
Environment = "PYTHONUNBUFFERED=1";
ExecStart = "${pkgs.myPython}/bin/python3 ${paperdScript}";
};
};
};
}

View File

@@ -0,0 +1,89 @@
{ pkgs }:
let
themeBuilder = import ./theme_builder.nix { inherit pkgs; };
in
pkgs.writeText "paperd.py" /* python */ ''
import tomllib
import sys
import time
from pathlib import Path
from collections import deque
import subprocess
from pynvim import attach
config = None
with open(Path("~/.config/paperd/config.toml").expanduser(), "rb") as f:
config = tomllib.load(f)
interval = config["interval"]
paper_dir = Path(config["wallpaper_dir"])
transition = config.get("transition", {})
transition_type = transition.get("type")
transition_fps = transition.get("fps")
transition_duration = transition.get("duration")
transition_angle = transition.get("angle")
transition_step = transition.get("step")
exts = {".jpg", ".jpeg", ".png", ".webp"}
images = deque([f for f in Path(paper_dir).iterdir() if f.suffix.lower() in exts])
if len(images) == 0:
print("No images found in the specified directory.")
sys.exit(1)
def get_command():
command = ["${pkgs.swww}/bin/swww", "img"]
if transition_type:
command.append("--transition-type")
command.append(transition_type)
if transition_fps:
command.append("--transition-fps")
command.append(str(transition_fps))
if transition_duration:
command.append("--transition-duration")
command.append(str(transition_duration))
if transition_angle:
command.append("--transition-angle")
command.append(str(transition_angle))
if transition_step:
command.append("--transition-step")
command.append(str(transition_step))
command.append(str(images[0]))
return command
print(f"Found {len(images)} images. Starting wallpaper rotation every {interval} seconds.")
current_time = int(time.time())
initial_idx = (current_time // interval) % len(images)
command = get_command()
subprocess.run(command)
subprocess.run(["${pkgs.myPython}/bin/python3", "${themeBuilder}", str(images[0])])
print(f"Setting wallpaper to {images[0]} with transition {transition_type} (fps: {transition_fps}, duration: {transition_duration}, angle: {transition_angle}, step: {transition_step})")
images.rotate(-1)
last_check = current_time % interval
time.sleep(5)
while True:
current_time = int(time.time())
if (current_time % interval) >= last_check:
last_check = current_time % interval
time.sleep(5)
continue
command = get_command()
print(f"Setting wallpaper to {images[0]} with transition {transition_type} (fps: {transition_fps}, duration: {transition_duration}, angle: {transition_angle}, step: {transition_step})")
subprocess.run(command)
subprocess.run(["${pkgs.myPython}/bin/python3", "${themeBuilder}", str(images[0])])
images.rotate(-1)
last_check = current_time % interval
time.sleep(5)
''

View File

@@ -0,0 +1,474 @@
{ pkgs }:
pkgs.writeText "theme-builder.py" ''
from colorsys import rgb_to_hls, hls_to_rgb
from collections import Counter
from pathlib import Path
from PIL import Image
from pynvim import attach
import subprocess
import math
import os
import sys
STATE_DIR = Path(os.path.expanduser("~/.local/state/sysflake"))
MULT = 2.5
GRAYSCALE = {
"base00": "1a1a1a",
"base01": "2a2a2a",
"base02": "3a3a3a",
"base03": "5a5a5a",
"base04": "8a8a8a",
"base05": "b0b0b0",
"base06": "d0d0d0",
"base07": "e8e8e8",
"base08": "4a4a4a",
"base09": "555555",
"base0A": "606060",
"base0B": "6b6b6b",
"base0C": "767676",
"base0D": "818181",
"base0E": None, # accent slot
"base0F": "8c8c8c",
}
KITTY_MAP = {
"background": "00", "foreground": "05", "cursor": "05",
"selection_background": "02", "selection_foreground": "05",
"color0": "00", "color1": "08", "color2": "0E", "color3": "0A",
"color4": "0D", "color5": "0E", "color6": "0E", "color7": "05",
"color8": "03", "color9": "08", "color10": "0E", "color11": "0A",
"color12": "0D", "color13": "0E", "color14": "0E", "color15": "07",
}
def extract_accent(image_path):
img = Image.open(image_path).resize((200, 200)).quantize(colors=32).convert("RGB")
pixels = list(img.get_flattened_data())
counts = Counter(pixels)
total = len(pixels)
def score(color):
_, l, s = rgb_to_hls(color[0] / 255, color[1] / 255, color[2] / 255)
vibrancy = s * (1 - abs(l - 0.5) * 2)
frequency = counts[color] / total
return vibrancy * frequency
best = max(counts.keys(), key=score)
h, l, s = rgb_to_hls(best[0] / 255, best[1] / 255, best[2] / 255)
new_s = min(max(s * MULT, 0.6), 0.7)
# Blue hues are perceptually darker gradually boost lightness floor
blue_center = 0.63
blue_width = 0.09
blue_factor = max(0, 1 - abs(h - blue_center) / blue_width)
min_l = 0.45 + 0.2 * blue_factor
new_l = max(min_l, min(0.7, l))
r, g, b = hls_to_rgb(h, new_l, new_s)
return f"{int(r * 255):02x}{int(g * 255):02x}{int(b * 255):02x}"
def build_scheme(accent):
scheme = dict(GRAYSCALE)
scheme["base0E"] = accent
return scheme
def write_scheme(scheme):
path = STATE_DIR / "scheme.txt"
with open(path, "w") as f:
for key, val in scheme.items():
f.write(f"{key} {val}\n")
def write_kitty(scheme):
path = STATE_DIR / "kitty-colors.conf"
with open(path, "w") as f:
for name, base in KITTY_MAP.items():
f.write(f"{name} #{scheme['base' + base]}\n")
VESKTOP_DIR = Path(os.path.expanduser("~/.config/vesktop/themes"))
def hex_to_oklch(hex_color):
"""Convert hex color to oklch (lightness, chroma, hue) values."""
r = int(hex_color[0:2], 16) / 255
g = int(hex_color[2:4], 16) / 255
b = int(hex_color[4:6], 16) / 255
# sRGB to linear
def to_linear(c):
return c / 12.92 if c <= 0.04045 else ((c + 0.055) / 1.055) ** 2.4
lr, lg, lb = to_linear(r), to_linear(g), to_linear(b)
# Linear RGB to OKLab
l_ = 0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb
m_ = 0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb
s_ = 0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb
l_ = l_ ** (1/3) if l_ >= 0 else -((-l_) ** (1/3))
m_ = m_ ** (1/3) if m_ >= 0 else -((-m_) ** (1/3))
s_ = s_ ** (1/3) if s_ >= 0 else -((-s_) ** (1/3))
L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_
a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_
bv = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_
C = math.sqrt(a ** 2 + bv ** 2)
H = math.degrees(math.atan2(bv, a)) % 360
return L, C, H
def write_vesktop(scheme):
VESKTOP_DIR.mkdir(parents=True, exist_ok=True)
accent = scheme["base0E"]
_, chroma, hue = hex_to_oklch(accent)
path = VESKTOP_DIR / "system24-dynamic.css"
with open(path, "w") as f:
f.write("""\
/**
* system24 dynamic theme generated by theme-engine
*/
@import url('https://refact0r.github.io/system24/build/system24.css');
:root {
--colors: on;
/* override purple (accent) with extracted color */
""")
for i, lightness in enumerate([75, 70, 65, 60, 55], start=1):
f.write(f" --purple-{i}: oklch({lightness}% {chroma:.4f} {hue:.1f});\n")
f.write("}\n")
def write_nvim(scheme):
accent = scheme["base0E"]
path = STATE_DIR / "nvim-colors.lua"
with open(path, "w") as f:
f.write("require('base16-colorscheme').setup({\n")
for key, val in scheme.items():
f.write(f" {key} = '#{val}',\n")
f.write("})\n\n")
f.write(f"local accent = '#{accent}'\n")
f.write(f"local light_gray = '#{scheme['base05']}'\n")
for group in ["Statement", "Conditional", "Repeat", "Macro", "Function", "Exception",
"TSMethod", "@lsp.type.method", "@lsp.type.function", "@lsp.type.macro",
"DiagnosticUnderlineHint", "Boolean"]:
f.write(f"vim.api.nvim_set_hl(0, '{group}', {{ fg = accent }})\n")
for group in ["@lsp.type.variable", "@lsp.type.parameter", "@lsp.type.struct", "@lsp.type.class",
"@lsp.type.selfTypeKeyword", "Identifier"]:
f.write(f"vim.api.nvim_set_hl(0, '{group}', {{ fg = light_gray }})\n")
for group in ["@lsp.type.enumMember", "@lsp.type.enum", "Number", "Integer"]:
f.write(f"vim.api.nvim_set_hl(0, '{group}', {{ fg = '#{scheme['base04']}' }})\n")
def write_swaync(scheme):
accent = scheme["base0E"]
path = STATE_DIR / "swaync-colors.css"
with open(path, "w") as f:
f.write(f"""\
@define-color base #{scheme['base00']};
@define-color mantle #{scheme['base01']};
@define-color crust #{scheme['base00']};
@define-color text #{scheme['base05']};
@define-color subtext0 #{scheme['base04']};
@define-color subtext1 #{scheme['base05']};
@define-color surface0 #{scheme['base01']};
@define-color surface1 #{scheme['base02']};
@define-color surface2 #{scheme['base03']};
@define-color overlay0 #{scheme['base03']};
@define-color overlay1 #{scheme['base04']};
@define-color overlay2 #{scheme['base04']};
@define-color lavender #{accent};
""")
EZA_DIR = Path(os.path.expanduser("~/.config/eza"))
def write_eza(scheme):
EZA_DIR.mkdir(parents=True, exist_ok=True)
accent = f'"#{scheme["base0E"]}"'
file_color = f'"#{scheme["base05"]}"'
dim = f'"#{scheme["base04"]}"'
dimmer = f'"#{scheme["base03"]}"'
dark = f'"#{scheme["base02"]}"'
path = EZA_DIR / "theme.yml"
with open(path, "w") as f:
f.write(f"""\
filekinds:
normal:
foreground: {file_color}
directory:
foreground: {accent}
is_bold: true
is_underline: true
symlink:
foreground: {dim}
pipe:
foreground: {dimmer}
block_device:
foreground: {dim}
char_device:
foreground: {dim}
socket:
foreground: {dimmer}
special:
foreground: {dim}
executable:
foreground: {accent}
is_bold: true
mount_point:
foreground: {accent}
perms:
user_read:
foreground: {file_color}
user_write:
foreground: {dim}
user_execute_file:
foreground: {accent}
user_execute_other:
foreground: {accent}
group_read:
foreground: {dim}
group_write:
foreground: {dimmer}
group_execute:
foreground: {dim}
other_read:
foreground: {dimmer}
other_write:
foreground: {dimmer}
other_execute:
foreground: {dimmer}
special_user_file:
foreground: {accent}
special_other:
foreground: {dimmer}
attribute:
foreground: {dimmer}
size:
number_byte:
foreground: {file_color}
number_kilo:
foreground: {dim}
number_mega:
foreground: {dim}
number_giga:
foreground: {accent}
number_huge:
foreground: {accent}
unit_byte:
foreground: {dimmer}
unit_kilo:
foreground: {dimmer}
unit_mega:
foreground: {dimmer}
unit_giga:
foreground: {dimmer}
unit_huge:
foreground: {dimmer}
users:
user_you:
foreground: {file_color}
user_root:
foreground: {accent}
user_other:
foreground: {dim}
group_yours:
foreground: {dim}
group_other:
foreground: {dimmer}
group_root:
foreground: {accent}
links:
normal:
foreground: {dim}
multi_link_file:
foreground: {accent}
git:
new:
foreground: {accent}
modified:
foreground: {dim}
deleted:
foreground: {dimmer}
renamed:
foreground: {dim}
typechange:
foreground: {dim}
ignored:
foreground: {dark}
conflicted:
foreground: {accent}
git_repo:
branch_main:
foreground: {file_color}
branch_other:
foreground: {dim}
git_clean:
foreground: {accent}
git_dirty:
foreground: {dim}
file_type:
image:
foreground: {dim}
video:
foreground: {dim}
music:
foreground: {dim}
lossless:
foreground: {dim}
crypto:
foreground: {dimmer}
document:
foreground: {file_color}
compressed:
foreground: {dimmer}
temp:
foreground: {dark}
compiled:
foreground: {dimmer}
build:
foreground: {dimmer}
source:
foreground: {file_color}
punctuation:
foreground: {dimmer}
date:
foreground: {dim}
inode:
foreground: {dimmer}
blocks:
foreground: {dimmer}
header:
foreground: {file_color}
octal:
foreground: {dimmer}
flags:
foreground: {dim}
symlink_path:
foreground: {dim}
control_char:
foreground: {dimmer}
broken_symlink:
foreground: {accent}
broken_path_overlay:
foreground: {dark}
""")
def write_waybar(scheme):
accent = scheme["base0E"]
bg = scheme["base00"]
fg = scheme["base05"]
path = STATE_DIR / "waybar-colors.css"
with open(path, "w") as f:
f.write(f"@define-color accent #{accent};\n")
f.write(f"@define-color bg-dark #{bg};\n")
f.write(f"@define-color fg-text #{fg};\n")
def write_hyprland(scheme):
accent = scheme["base0E"]
inactive = scheme["base03"]
path = STATE_DIR / "hyprland-colors.conf"
with open(path, "w") as f:
f.write(f"general:col.active_border = rgba({accent}ff)\n")
f.write(f"general:col.inactive_border = rgba({inactive}ff)\n")
def reload_apps():
print("Reloading applications with new theme...")
subprocess.run(["pkill", "-SIGUSR1", "kitty"], capture_output=True)
print("Sent reload signal to Kitty.")
nvim_colors = STATE_DIR / "nvim-colors.lua"
for sock in Path("/run/user/1000").glob("nvim.*.0"):
try:
nvim = attach('socket', path=str(sock))
nvim.command(f"luafile {nvim_colors}")
print(f"Sent reload command to Neovim instance at {sock}.")
except Exception as e:
print(f"Failed to connect to Neovim instance at {sock}: {e}")
# Live-update hyprland borders
scheme = {}
for line in open(STATE_DIR / "scheme.txt"):
k, v = line.split()
scheme[k] = v
subprocess.run(["hyprctl", "keyword", "general:col.active_border", f"rgba({scheme['base0E']}ff)"], capture_output=True)
subprocess.run(["hyprctl", "keyword", "general:col.inactive_border", f"rgba({scheme['base03']}ff)"], capture_output=True)
print("Updated Hyprland border colors.")
# Reload swaync styles
subprocess.run(["swaync-client", "-rs"], capture_output=True)
print("Sent reload signal to Swaync.")
# Reload waybar
subprocess.run(["pkill", "-SIGUSR2", "waybar"], capture_output=True)
print("Sent reload signal to Waybar.")
def main():
if len(sys.argv) < 2:
print("Usage: theme-engine.py <image-path>", file=sys.stderr)
sys.exit(1)
STATE_DIR.mkdir(parents=True, exist_ok=True)
accent = extract_accent(sys.argv[1])
scheme = build_scheme(accent)
print(f"Extracted accent color: #{accent}")
write_scheme(scheme)
print("Scheme written to state directory.")
write_kitty(scheme)
print("Kitty config written.")
write_vesktop(scheme)
print("Vesktop theme written.")
write_nvim(scheme)
print("Neovim colors written.")
write_hyprland(scheme)
print("Hyprland colors written.")
write_swaync(scheme)
print("Swaync colors written.")
write_eza(scheme)
print("Eza theme written.")
write_waybar(scheme)
print("Waybar colors written.")
reload_apps()
print("Sent reload signals to applications.")
print(f"Accent: #{accent}")
print(f"Scheme written to {STATE_DIR / 'scheme.txt'}")
print(f"Kitty config written to {STATE_DIR / 'kitty-colors.conf'}")
print(f"Vesktop theme written to {VESKTOP_DIR / 'system24-dynamic.css'}")
print(f"Neovim colors written to {STATE_DIR / 'nvim-colors.lua'}")
print(f"Hyprland colors written to {STATE_DIR / 'hyprland-colors.conf'}")
print(f"Swaync colors written to {STATE_DIR / 'swaync-colors.css'}")
print(f"Eza theme written to {EZA_DIR / 'theme.yml'}")
print(f"Waybar colors written to {STATE_DIR / 'waybar-colors.css'}")
if __name__ == "__main__":
main()
''

View File

@@ -1,4 +1,10 @@
{ lib, config, pkgs, self, ... }: {
lib,
config,
pkgs,
self,
...
}:
{ {
programs.shed = { programs.shed = {
aliases = { aliases = {
@@ -20,7 +26,7 @@
mkexe = "chmod +x"; mkexe = "chmod +x";
shortdate = "date +%m-%d-%y"; shortdate = "date +%m-%d-%y";
suvi = "sudoedit"; suvi = "sudoedit";
suvide = "EDITOR=neovide; suvi"; suvide = "EDITOR=neovide suvi";
rustdev = "nix develop github:km-clay/devshells#rust"; rustdev = "nix develop github:km-clay/devshells#rust";
y = "yazi"; y = "yazi";
@@ -29,6 +35,8 @@
gpush = "gitpush_sfx"; gpush = "gitpush_sfx";
gpull = "gitpull_sfx"; gpull = "gitpull_sfx";
grebase = "gitrebase_sfx"; grebase = "gitrebase_sfx";
videconf = "EDITOR=neovide viconf";
nix-shell = "command nix-shell --command 'exec shed'";
}; };
}; };
} }

View File

@@ -1,4 +1,10 @@
{ lib, config, self, pkgs, ... }: {
lib,
config,
self,
pkgs,
...
}:
let let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound"; shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
color-commit = "${pkgs.myScripts.color-commit}/bin/color-commit"; color-commit = "${pkgs.myScripts.color-commit}/bin/color-commit";
@@ -15,6 +21,8 @@ in
if [ "$0" = "-shed" ]; then if [ "$0" = "-shed" ]; then
${shellsound} $FLAKEPATH/assets/sound/login.wav ${shellsound} $FLAKEPATH/assets/sound/login.wav
fi fi
if [ -n "$LS_COLORS" ]; then unset LS_COLORS; fi
''; '';
}; };
} }

View File

@@ -276,7 +276,6 @@ in
ls = /* bash */ '' ls = /* bash */ ''
eza -1 --group-directories-first --icons "$@" eza -1 --group-directories-first --icons "$@"
${shellsound} ${sndpath}/ls.wav
''; '';
mkcd = /* bash */ '' mkcd = /* bash */ ''
@@ -286,7 +285,6 @@ in
cd = /* bash */ '' cd = /* bash */ ''
eza -1 --group-directories-first --icons "$@" 2> /dev/null eza -1 --group-directories-first --icons "$@" 2> /dev/null
builtin cd "$@" builtin cd "$@"
${shellsound} ${sndpath}/cd.wav
''; '';
hyprsock = /* bash */ '' hyprsock = /* bash */ ''

View File

@@ -2,7 +2,7 @@
{ {
programs.shed = { programs.shed = {
functions = { functions = {
_read_obj= /* bash */ '' _read_obj = /* bash */ ''
_obj="" _obj=""
while read_key -v key; do while read_key -v key; do
if [[ "''${#_obj}" -ge 3 ]]; then return 1; fi if [[ "''${#_obj}" -ge 3 ]]; then return 1; fi

View File

@@ -1,16 +1,21 @@
{ lib, config, pkgs, inputs, ... }: {
lib,
config,
pkgs,
inputs,
...
}:
let let
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system};
scheme = config.lib.stylix.colors; scheme = config.lib.stylix.colors;
in { in
{
imports = [ inputs.spicetify-nix.homeManagerModules.default ]; imports = [ inputs.spicetify-nix.homeManagerModules.default ];
options = { options = {
movOpts.envConfig.spicetifyConfig.enable = movOpts.envConfig.spicetifyConfig.enable = lib.mkEnableOption "enable my spicetify options";
lib.mkEnableOption "enable my spicetify options";
}; };
config = lib.mkIf config.movOpts.envConfig.spicetifyConfig.enable { config = lib.mkIf config.movOpts.envConfig.spicetifyConfig.enable {
nixpkgs.config.allowUnfreePredicate = pkg: nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "spotify" ];
builtins.elem (lib.getName pkg) [ "spotify" ];
programs.spicetify = { programs.spicetify = {
enable = true; enable = true;

View File

@@ -1,7 +1,12 @@
{ config, lib, inputs, ... }: { {
config,
lib,
inputs,
...
}:
{
options = { options = {
movOpts.envConfig.starshipConfig.enable = movOpts.envConfig.starshipConfig.enable = lib.mkEnableOption "enables my starship configuration";
lib.mkEnableOption "enables my starship configuration";
}; };
config = lib.mkIf config.movOpts.envConfig.starshipConfig.enable { config = lib.mkIf config.movOpts.envConfig.starshipConfig.enable {
programs.starship = { programs.starship = {

View File

@@ -1,19 +1,24 @@
{ lib, self, config, host, pkgs, ... }: {
lib,
self,
config,
host,
pkgs,
...
}:
let let
scheme = "seti"; scheme = "seti";
wallpaper = "${self}/assets/wallpapers/dark-waves.jpg";
server = (host == "xenon"); server = (host == "xenon");
in { in
{
options = { options = {
movOpts.envConfig.stylixHomeConfig.enable = movOpts.envConfig.stylixHomeConfig.enable = lib.mkEnableOption "enables my stylix Home-Manager options";
lib.mkEnableOption "enables my stylix Home-Manager options";
}; };
config = lib.mkIf config.movOpts.envConfig.stylixHomeConfig.enable { config = lib.mkIf config.movOpts.envConfig.stylixHomeConfig.enable {
stylix = { stylix = {
enable = true; enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${scheme}.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/${scheme}.yaml";
image = wallpaper;
polarity = "dark"; polarity = "dark";
autoEnable = true; autoEnable = true;
targets = { targets = {

View File

@@ -1,7 +1,12 @@
{ lib, config, pkgs, ... }: { {
lib,
config,
pkgs,
...
}:
{
options = { options = {
movOpts.envConfig.swayncConfig.enable = movOpts.envConfig.swayncConfig.enable = lib.mkEnableOption "enables my swaync configuration";
lib.mkEnableOption "enables my swaync configuration";
}; };
config = lib.mkIf config.movOpts.envConfig.swayncConfig.enable { config = lib.mkIf config.movOpts.envConfig.swayncConfig.enable {
home.packages = with pkgs; [ swaynotificationcenter ]; home.packages = with pkgs; [ swaynotificationcenter ];
@@ -608,6 +613,8 @@
.right.overlay-indicator { .right.overlay-indicator {
all: unset; all: unset;
} }
@import url("file:///home/pagedmov/.local/state/sysflake/swaync-colors.css");
''; '';
xdg.configFile."swaync/config.json".text = '' xdg.configFile."swaync/config.json".text = ''
{ {

View File

@@ -1,4 +1,11 @@
{ inputs, lib, config, pkgs, self, ... }: {
inputs,
lib,
config,
pkgs,
self,
...
}:
let let
scripts = with pkgs; [ scripts = with pkgs; [
@@ -25,74 +32,76 @@ let
myScripts.color-commit myScripts.color-commit
myScripts.mntstack myScripts.mntstack
]; ];
pythonWithStuff = pkgs.python3.withPackages(ps: with ps; [ requests ]); in
in { {
options = { options = {
movOpts.envConfig.userPkgs.enable = movOpts.envConfig.userPkgs.enable = lib.mkEnableOption "enables my default user packages";
lib.mkEnableOption "enables my default user packages";
}; };
config = lib.mkIf config.movOpts.envConfig.userPkgs.enable { config = lib.mkIf config.movOpts.envConfig.userPkgs.enable {
home.packages = with pkgs; [ home.packages =
cargo with pkgs;
rustc [
clippy cargo
rust-analyzer rustc
nerd-fonts.envy-code-r clippy
clippy rust-analyzer
rust-analyzer nerd-fonts.envy-code-r
nemo clippy
feh rust-analyzer
gtk3 nemo
vicut feh
imagemagick gtk3
vlc vicut
lolcat imagemagick
vesktop vlc
zsh lolcat
zsh-syntax-highlighting vesktop
zsh-history-substring-search zsh
zsh-autosuggestions zsh-syntax-highlighting
#libreoffice zsh-history-substring-search
gtrash zsh-autosuggestions
ripgrep #libreoffice
wf-recorder gtrash
toilet ripgrep
vkbasalt wf-recorder
firefox toilet
spotify vkbasalt
zathura firefox
tor spotify
tor-browser zathura
chromium tor
obs-studio tor-browser
gparted chromium
dust obs-studio
porsmo gparted
w3m dust
sox porsmo
neovide w3m
claude-code sox
pythonWithStuff neovide
monero-cli claude-code
protonup-qt myPython
piper monero-cli
libratbag protonup-qt
ghostty piper
firefox libratbag
fd ghostty
delta firefox
glfw fd
mesa-demos delta
xwayland glfw
discord mesa-demos
cloc xwayland
wine discord
gimp cloc
fira-code wine
nerd-fonts.fira-code gimp
nodejs_latest fira-code
myPkgs.noto-sans-jp nerd-fonts.fira-code
myPkgs.billy-font nodejs_latest
] ++ scripts; myPkgs.noto-sans-jp
myPkgs.billy-font
]
++ scripts;
}; };
} }

View File

@@ -1,27 +1,37 @@
{ pkgs, self, ... }: { pkgs, self, ... }:
let let
pythonWithPkgs = pkgs.python3.withPackages (p: [ p.evdev ]);
keyboardSfxScript = "${self}/assets/scripts/keyboard_sound_thing.py"; keyboardSfxScript = "${self}/assets/scripts/keyboard_sound_thing.py";
in in
{ {
systemd.user = { systemd.user = {
timers = { timers = {
maintenanceCheck = { maintenanceCheck = {
Unit = { Description = "Timer for package maintenance check"; }; Unit = {
Description = "Timer for package maintenance check";
};
Timer = { Timer = {
OnCalendar = "hourly"; OnCalendar = "hourly";
Persistent = true; Persistent = true;
}; };
Install = { WantedBy = [ "timers.target" ]; }; Install = {
WantedBy = [ "timers.target" ];
};
}; };
}; };
services = { services = {
swww-daemon = {
Unit.Description = "Daemon for swww (sway wayland wallpaper manager)";
Install.WantedBy = [ "hyprland-session.target" ];
Service = {
ExecStart = "${pkgs.swww}/bin/swww-daemon";
};
};
kitty-keyboard-sounds = { kitty-keyboard-sounds = {
description = "Keyboard sound effects for kitty"; Unit.Description = "Keyboard sound effects for kitty";
wantedBy = [ "hyprland-session.target" ]; Install.WantedBy = [ "hyprland-session.target" ];
serviceConfig = { Service = {
ExecStart = "${pythonWithPkgs}/bin/python3 ${keyboardSfxScript}"; ExecStart = "${pkgs.myPython}/bin/python3 ${keyboardSfxScript}";
}; };
}; };
}; };

View File

@@ -1,4 +1,10 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
self,
...
}:
let let
layout = config.movOpts.envConfig.hyprlandConfig.workspaceLayout; layout = config.movOpts.envConfig.hyprlandConfig.workspaceLayout;
@@ -27,226 +33,245 @@ let
"20" = "20"; "20" = "20";
}; };
persistent-workspaces = persistent-workspaces =
if (layout == "singlemonitor") then { if (layout == "singlemonitor") then
"${builtins.elemAt monitors 0}" = [ 1 2 3 4 ]; {
} else if (layout == "dualmonitor") then { "${builtins.elemAt monitors 0}" = [
"${builtins.elemAt monitors 0}" = [ 1 2 3 ]; 1
"${builtins.elemAt monitors 1}" = [ 4 5 6 ]; 2
} else if (layout == "trimonitor") then { 3
"${builtins.elemAt monitors 2}" = [ 1 2 ]; 4
"${builtins.elemAt monitors 1}" = [ 3 4 ]; ];
"${builtins.elemAt monitors 0}" = [ 5 6 ]; }
} else else if (layout == "dualmonitor") then
{
"${builtins.elemAt monitors 0}" = [
1
2
3
];
"${builtins.elemAt monitors 1}" = [
4
5
6
];
}
else if (layout == "trimonitor") then
{
"${builtins.elemAt monitors 2}" = [
1
2
];
"${builtins.elemAt monitors 1}" = [
3
4
];
"${builtins.elemAt monitors 0}" = [
5
6
];
}
else
{ }; { };
}; };
scheme = config.lib.stylix.colors;
bg = {
darkester = scheme.base00;
darkest = scheme.base01;
darker = scheme.base02;
dark = scheme.base03;
};
fg = {
lightester = scheme.base07;
lightest = scheme.base06;
lighter = scheme.base05;
light = scheme.base04;
};
monitors = config.movOpts.envConfig.hyprlandConfig.monitorNames; monitors = config.movOpts.envConfig.hyprlandConfig.monitorNames;
bar-gauge = [ in
"" {
""
""
""
""
""
""
""
""
];
bar-gauge-critical = [
""
""
""
""
""
""
""
"<span color='#F07178'>!!!!!!!!</span>"
"<span color='#F07178'>CRITICAL</span>"
];
in {
options = { options = {
movOpts.envConfig.waybarConfig.enable = movOpts.envConfig.waybarConfig.enable = lib.mkEnableOption "enables my waybar configuration";
lib.mkEnableOption "enables my waybar configuration";
}; };
config = { config = {
programs.waybar = { programs.waybar = {
enable = true; enable = true;
package = pkgs.waybar.overrideAttrs (oa: {
mesonFlags = (oa.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ];
});
settings = { settings = {
mainBar = { mainBar = {
layer = "top"; layer = "top";
output = if layout == "singlemonitor" then builtins.elemAt monitors 0 output = monitors;
else builtins.elemAt monitors 1;
position = "top"; position = "top";
name = "mainBar"; name = "waybar";
margin-left = 0; margin-left = 0;
margin-top = 0; margin-top = 0;
margin-right = 0; margin-right = 0;
mode = "dock"; exclusive = true;
exclusive = true; passthrough = false;
passthrough = false;
"gtk-layer-shell" = true; "gtk-layer-shell" = true;
modules-left = [ "clock" "hyprland/workspaces" "tray" ]; modules-left = [
modules-center = []; "tray"
modules-right = [ "cpu" "memory" "pulseaudio" "network" ]; "hyprland/workspaces"
];
modules-center = [ "hyprland/window" ];
"hyprland/window" = {
format = "<span color='#aaaaaa'>{title}</span>";
};
modules-right = [
"cpu"
"memory"
"pulseaudio"
"network"
"clock"
"image#nixicon"
];
"hyprland/workspaces" = workspaces; "hyprland/workspaces" = workspaces;
clock = { clock = {
format = "[ CLK: {:%H.%M <span size='8pt'> %a %b %d</span>} ]"; format = "󱑍 <span color='#aaaaaa'>{:%H:%M}</span>";
tooltip-format = "<tt>{calendar}</tt>";
calendar = {
mode = "month";
weeks-pos = "";
on-scroll = 1;
format = {
months = "<span size='16pt'><b>CAL: {}\n</b></span>";
days = "<span size='16pt'><b>{}</b></span>";
weeks = "<span size='16pt'><b>{}</b></span>";
weekdays = "<span size='16pt'><b>{}</b></span>";
today = "<span color='#E6E1CF'><b>{}</b></span>";
};
};
actions = {
on-scroll-up = "shift_down";
on-scroll-down = "shift_up";
};
}; };
pulseaudio = { pulseaudio = {
format = "VOL: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{volume}%</span>"; format = " <span color='#aaaaaa'>{volume}%</span>";
tooltip = true; tooltip = true;
tooltip-format = "DEVICE: {desc}"; tooltip-format = "{desc}";
format-muted = "VOL: <span color='#F07178'>[ XXXXXXXX ] <span size='8pt'>{volume}%</span></span>"; format-muted = " <span color='#aaaaaa'>{volume}%</span>";
on-click = "if [ $(pamixer --get-mute) == true ]; then pamixer --unmute; else pamixer --mute; fi"; on-click = "if [ $(pamixer --get-mute) == true ]; then pamixer --unmute; else pamixer --mute; fi";
on-scroll-up = "pamixer -i 2"; on-scroll-up = "pamixer -i 2";
on-scroll-down = "pamixer -d 2"; on-scroll-down = "pamixer -d 2";
scroll-step = 2; scroll-step = 2;
reverse-scrolling = true; reverse-scrolling = true;
format-icons = bar-gauge; };
};
network = { network = {
format-wifi = "[ <span color='#B8CC52'>ONLINE</span> ]"; format-wifi = "󰖩 <span color='#aaaaaa'>{essid}</span>";
format-ethernet = "[ <span color='#B8CC52'>ONLINE</span> ]"; format-ethernet = " <span color='#aaaaaa'>{ifname}</span>";
tooltip-format-wifi = "ESSID\t: {essid}\nSTRNGTH\t: {signaldBm}\n\nADDRESS\t: {ipaddr}\nGATE\t: {gwaddr}\nMASK\t: {netmask} | {cidr}"; tooltip-format-wifi = "ESSID\t: {essid}\nSTRNGTH\t: {signaldBm}\n\nADDRESS\t: {ipaddr}\nGATE\t: {gwaddr}\nMASK\t: {netmask} | {cidr}";
tooltip-format-ethernet = "IFNAME: {ifname}\nADDRESS: {ipaddr}"; tooltip-format-ethernet = "IFNAME: {ifname}\nADDRESS: {ipaddr}";
format-disconnected = "[ <span color='#F07178'>XXXXXX</span> ]"; format-disconnected = "󱚼";
on-click = "nm-connection-editor"; on-click = "nm-connection-editor";
}; };
memory = { "image#nixicon" = {
interval = 20; path = "/home/pagedmov/.sysflake/assets/images/nix-snowflake-colours.svg";
format = "MEM: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{percentage}%</span>"; size = 28;
tooltip-format = "MEM_TOT\t: {total}GiB\nSWP_TOT\t: {swapTotal}GiB\n\nMEM_USD\t: {used:0.1f}GiB\nSWP_USD\t: {swapUsed:0.1f}GiB"; };
format-icons = bar-gauge-critical;
};
cpu = { memory = {
interval = 20;
format = " <span color='#aaaaaa'>{percentage}%</span>";
tooltip-format = "MEM_TOT\t: {total}GiB\nSWP_TOT\t: {swapTotal}GiB\n\nMEM_USD\t: {used:0.1f}GiB\nSWP_USD\t: {swapUsed:0.1f}GiB";
};
interval = 1; cpu = {
format = "CPU: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{usage}%</span>"; interval = 1;
tooltip = true; format = "󰍛 <span color='#aaaaaa'>{usage}%</span>";
format-icons = bar-gauge-critical; tooltip = true;
}; };
}; };
}; };
style = '' style = ''
* { @define-color accent #CF1B30;
font-size: 16px; @define-color bg-dark #1a1a1a;
border: none; @define-color bg-island #2a2a2a;
font-family: EnvyCodeR Nerd Font Mono; @define-color fg-dim #aaaaaa;
font-weight: Bold; @define-color fg-text #d0d0d0;
min-height: 0;
border-radius: 0px;
padding: 2px;
}
window#waybar { * {
color: #${fg.lightest}; font-size: 20px;
background: #${bg.darkester}; border: none;
} font-family: EnvyCodeR Nerd Font Mono;
font-weight: bold;
min-height: 0;
border-radius: 0;
}
tooltip { window#waybar {
background: #${bg.darkester}; background: rgba(0, 0, 0, 0.05);
} color: @fg-text;
}
#workspaces button { tooltip {
color: #${fg.lightest}; background: @bg-dark;
background: #${bg.darkester}; border: 2px solid @accent;
} border-radius: 8px;
}
#workspaces button.active { /* Tray island (far left) */
color: #${bg.darker}; #tray {
background: #${bg.darkester}; background-color: @bg-dark;
} color: @accent;
border: 2px solid @accent;
border-radius: 8px;
padding: 4px 8px;
margin: 6px 4px 6px 10px;
}
#workspaces button.focused { /* Workspaces island */
color: #${bg.dark}; #workspaces {
background: #${bg.darkester}; background-color: @bg-dark;
} border: 2px solid @accent;
border-radius: 8px;
margin: 6px 4px;
padding: 0 4px;
}
#workspaces button.urgent { #workspaces button {
color: #${fg.lightest}; color: @fg-dim;
background: #${bg.darkester}; background: transparent;
} padding: 4px 8px;
border-radius: 6px;
margin: 2px;
}
#workspaces button:hover { #workspaces button.active {
color: #${fg.lightest}; color: @bg-dark;
background: #${bg.darkester}; background-color: @accent;
} }
#window, #workspaces button:hover {
#clock, color: @bg-dark;
#pulseaudio, background-color: alpha(@accent, 0.5);
#network, }
#workspaces,
#tray,
#cpu {
padding: 0px 10px;
margin: 0px;
}
#tray { /* Right info modules island */
margin-right: 10px; #cpu,
} #memory,
#pulseaudio,
#network,
#window,
#clock {
background-color: @bg-dark;
color: @accent;
border-top: 2px solid @accent;
border-bottom: 2px solid @accent;
padding: 4px 10px;
margin: 6px 0;
}
#workspaces { /* Window title island (center) */
color: #${fg.lightest}; #window {
} border-radius: 8px;
border-left: 2px solid @accent;
border-right: 2px solid @accent;
margin: 6px 4px;
}
#window { /* round left edge of first module in the group */
color: #${fg.lightest}; #cpu {
} border-radius: 8px 0 0 8px;
border-left: 2px solid @accent;
margin-left: 4px;
}
#clock { /* round right edge of last module before nixicon */
color: #${fg.lightest}; #clock {
} border-radius: 0 8px 8px 0;
border-right: 2px solid @accent;
margin-right: 4px;
}
#network { /* NixOS icon island (far right, outlined) */
color: #${fg.lightest}; #image {
} background-color: @bg-dark;
color: @accent;
border: 2px solid @accent;
border-radius: 8px;
padding: 4px 10px;
margin: 6px 10px 6px 4px;
}
#pulseaudio { @import url("file:///home/pagedmov/.local/state/sysflake/waybar-colors.css");
color: #${fg.lightest};
}
''; '';
}; };
}; };

View File

@@ -1,6 +1,12 @@
{ lib, config, self, ... }:
{ {
options.movOpts.envConfig.zshConfig.shellAliases.enable = lib.mkEnableOption "enables my zsh aliases"; lib,
config,
self,
...
}:
{
options.movOpts.envConfig.zshConfig.shellAliases.enable =
lib.mkEnableOption "enables my zsh aliases";
config = lib.mkIf config.movOpts.envConfig.zshConfig.shellAliases.enable { config = lib.mkIf config.movOpts.envConfig.zshConfig.shellAliases.enable {
programs.zsh = { programs.zsh = {
shellAliases = { shellAliases = {

View File

@@ -1,4 +1,9 @@
{ lib, config, self, ... }: {
lib,
config,
self,
...
}:
{ {
imports = [ imports = [

View File

@@ -2,7 +2,8 @@
{ {
options = { options = {
movOpts.envConfig.zshConfig.envVariables.enable = lib.mkEnableOption "enables my default session variables"; movOpts.envConfig.zshConfig.envVariables.enable =
lib.mkEnableOption "enables my default session variables";
}; };
config = lib.mkIf config.movOpts.envConfig.zshConfig.envVariables.enable { config = lib.mkIf config.movOpts.envConfig.zshConfig.envVariables.enable {
programs.zsh = { programs.zsh = {

View File

@@ -1,4 +1,10 @@
{ lib, config, self, pkgs, ... }: {
lib,
config,
self,
pkgs,
...
}:
let let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound"; shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
@@ -8,7 +14,8 @@ let
in in
{ {
options = { options = {
movOpts.envConfig.zshConfig.extraConfig.enable = lib.mkEnableOption "enables my extra shell configurations"; movOpts.envConfig.zshConfig.extraConfig.enable =
lib.mkEnableOption "enables my extra shell configurations";
}; };
config = lib.mkIf config.movOpts.envConfig.zshConfig.extraConfig.enable { config = lib.mkIf config.movOpts.envConfig.zshConfig.extraConfig.enable {
programs.zsh = { programs.zsh = {

View File

@@ -2,7 +2,8 @@
{ {
options = { options = {
movOpts.envConfig.zshConfig.shellOptions.enable = lib.mkEnableOption "enables my default shell settings"; movOpts.envConfig.zshConfig.shellOptions.enable =
lib.mkEnableOption "enables my default shell settings";
}; };
config = lib.mkIf config.movOpts.envConfig.zshConfig.shellOptions.enable { config = lib.mkIf config.movOpts.envConfig.zshConfig.shellOptions.enable {
programs.zoxide = { programs.zoxide = {

View File

@@ -1,40 +1,51 @@
{ pkgs, lib, self, config, ... }: {
pkgs,
lib,
self,
config,
...
}:
# This folder is for programs that do not have existing configuration modules in NixOS. # This folder is for programs that do not have existing configuration modules in NixOS.
# Basically a to-do list for stuff I need to write my own modules for. # Basically a to-do list for stuff I need to write my own modules for.
let let
# Extract color scheme from base_16 yaml file # Extract color scheme from base_16 yaml file
extractSchemeFromYaml = base16_scheme: let extractSchemeFromYaml =
scheme_path = "${pkgs.base16-schemes}/share/themes/${base16_scheme}.yaml"; base16_scheme:
scheme_string = builtins.readFile scheme_path; let
scheme_list = lib.splitString "\n" scheme_string; # Split into a list scheme_path = "${pkgs.base16-schemes}/share/themes/${base16_scheme}.yaml";
colors = scheme_string = builtins.readFile scheme_path;
lib.filter (line: builtins.match "^ *base[0-9A-F]{2}: .*" line != null) # Get raw hex values from scheme list scheme_list = lib.splitString "\n" scheme_string; # Split into a list
scheme_list; colors =
parsed_scheme = lib.lists.foldl' (acc: line: # Initialize attribute set and begin folding values into it lib.filter (line: builtins.match "^ *base[0-9A-F]{2}: .*" line != null) # Get raw hex values from scheme list
let scheme_list;
splitLine = lib.splitString ": " line; # Split into keys (base00, base01, etc.) and values parsed_scheme = lib.lists.foldl' (
key = builtins.elemAt splitLine 0; acc: line: # Initialize attribute set and begin folding values into it
value = builtins.elemAt splitLine 1; let
trimmedKey = lib.trim key; # Start cleaning values splitLine = lib.splitString ": " line; # Split into keys (base00, base01, etc.) and values
cleanValue_step1 = lib.splitString " " value; key = builtins.elemAt splitLine 0;
cleanValue_step2 = builtins.elemAt cleanValue_step1 0; # Get just the hex value, ignore comments etc. value = builtins.elemAt splitLine 1;
cleanValue_final = trimmedKey = lib.trim key; # Start cleaning values
builtins.substring 1 (builtins.stringLength cleanValue_step2 - 2) cleanValue_step1 = lib.splitString " " value;
cleanValue_step2; cleanValue_step2 = builtins.elemAt cleanValue_step1 0; # Get just the hex value, ignore comments etc.
in acc // { "${trimmedKey}" = cleanValue_final; }) { } colors; # Accumulate keys/values into attribute set cleanValue_final = builtins.substring 1 (
in parsed_scheme; # Return parsed color scheme builtins.stringLength cleanValue_step2 - 2
) cleanValue_step2;
in
acc // { "${trimmedKey}" = cleanValue_final; }
) { } colors; # Accumulate keys/values into attribute set
in
parsed_scheme; # Return parsed color scheme
ssh_scheme = extractSchemeFromYaml "atelier-cave" ; ssh_scheme = extractSchemeFromYaml "atelier-cave";
nix-shell_scheme = extractSchemeFromYaml "blueish"; nix-shell_scheme = extractSchemeFromYaml "blueish";
def_scheme = config.lib.stylix.colors; def_scheme = config.lib.stylix.colors;
# Custom theme for nix-shell # Custom theme for nix-shell
in { in
{
options = { options = {
movOpts.homeFiles.enable = movOpts.homeFiles.enable = lib.mkEnableOption "enables declared custom files";
lib.mkEnableOption "enables declared custom files";
}; };
config = { config = {
home.file = { home.file = {

View File

@@ -1,7 +1,7 @@
{ lib, config, ... }: { { lib, config, ... }:
{
options = { options = {
movOpts.programConfigs.autojumpConfig.enable = movOpts.programConfigs.autojumpConfig.enable = lib.mkEnableOption "enables my autojump options";
lib.mkEnableOption "enables my autojump options";
}; };
config = lib.mkIf config.movOpts.programConfigs.autojumpConfig.enable { config = lib.mkIf config.movOpts.programConfigs.autojumpConfig.enable {
programs.autojump = { programs.autojump = {

View File

@@ -1,12 +1,19 @@
{ lib, config, inputs, ... }: { {
lib,
config,
inputs,
...
}:
{
options = { options = {
movOpts.programConfigs.batConfig.enable = movOpts.programConfigs.batConfig.enable = lib.mkEnableOption "enables my bat options";
lib.mkEnableOption "enables my bat options";
}; };
config = lib.mkIf config.movOpts.programConfigs.batConfig.enable { config = lib.mkIf config.movOpts.programConfigs.batConfig.enable {
programs.bat = { programs.bat = {
enable = true; enable = true;
config = { pager = "less -FR"; }; config = {
pager = "less -FR";
};
}; };
}; };
} }

View File

@@ -1,7 +1,12 @@
{ lib, config, pkgs, ... }: { {
lib,
config,
pkgs,
...
}:
{
options = { options = {
movOpts.programConfigs.btopConfig.enable = movOpts.programConfigs.btopConfig.enable = lib.mkEnableOption "enables my btop config";
lib.mkEnableOption "enables my btop config";
}; };
config = lib.mkIf config.movOpts.programConfigs.btopConfig.enable { config = lib.mkIf config.movOpts.programConfigs.btopConfig.enable {
programs.btop = { programs.btop = {
@@ -10,8 +15,7 @@
settings = { settings = {
update_ms = 500; update_ms = 500;
vim_keys = true; vim_keys = true;
color_theme = "nord"; color_theme = "TTY";
theme_background = true;
temp_scale = "fahrenheit"; temp_scale = "fahrenheit";
graph_symbol = "block"; graph_symbol = "block";
disks_filter = "exclude=/boot /"; disks_filter = "exclude=/boot /";

View File

@@ -1,9 +1,17 @@
{ lib, config, inputs, pkgs, ... }: { {
lib,
config,
inputs,
pkgs,
...
}:
{
options = { options = {
movOpts.programConfigs.cavaConfig.enable = movOpts.programConfigs.cavaConfig.enable = lib.mkEnableOption "enables my cava settings";
lib.mkEnableOption "enables my cava settings";
}; };
config = lib.mkIf config.movOpts.programConfigs.cavaConfig.enable { config = lib.mkIf config.movOpts.programConfigs.cavaConfig.enable {
programs.cava = { enable = true; }; programs.cava = {
enable = true;
};
}; };
} }

View File

@@ -1,8 +1,27 @@
{ env, host, nixvim, self, inputs, username, config, home-manager, ... }: { {
imports = [ (import ./btop.nix) ] ++ [ (import ./yazi.nix) ] env,
++ [ (import ./kitty.nix) ] ++ [ (import ./fuzzel.nix) ] host,
++ [ (import ./eza.nix) ] ++ [ (import ./cava.nix) ] nixvim,
++ [ (import ./bat.nix) ] ++ [ (import ./fzf.nix) ] self,
++ [ (import ./git.nix) ] ++ [ (import ./password-store.nix) ] inputs,
++ [ (import ./autojump.nix) ] ++ [ (import ./nixvim) ]; username,
config,
home-manager,
...
}:
{
imports = [
(import ./btop.nix)
]
++ [ (import ./yazi.nix) ]
++ [ (import ./kitty.nix) ]
++ [ (import ./fuzzel.nix) ]
++ [ (import ./eza.nix) ]
++ [ (import ./cava.nix) ]
++ [ (import ./bat.nix) ]
++ [ (import ./fzf.nix) ]
++ [ (import ./git.nix) ]
++ [ (import ./password-store.nix) ]
++ [ (import ./autojump.nix) ]
++ [ (import ./nixvim) ];
} }

View File

@@ -1,13 +1,17 @@
{ lib, config, ... }: { { lib, config, ... }:
{
options = { options = {
movOpts.programConfigs.ezaConfig.enable = movOpts.programConfigs.ezaConfig.enable = lib.mkEnableOption "enables my eza options";
lib.mkEnableOption "enables my eza options";
}; };
config = lib.mkIf config.movOpts.programConfigs.ezaConfig.enable { config = lib.mkIf config.movOpts.programConfigs.ezaConfig.enable {
programs.eza = { programs.eza = {
enable = true; enable = true;
enableZshIntegration = false; enableZshIntegration = false;
extraOptions = [ "-1" "-h" "--group-directories-first" ]; extraOptions = [
"-1"
"-h"
"--group-directories-first"
];
icons = "auto"; icons = "auto";
git = true; git = true;
}; };

View File

@@ -1,7 +1,7 @@
{ config, lib, ... }: { { config, lib, ... }:
{
options = { options = {
movOpts.programConfigs.fuzzelConfig.enable = movOpts.programConfigs.fuzzelConfig.enable = lib.mkEnableOption "enables my fuzzel configuration";
lib.mkEnableOption "enables my fuzzel configuration";
}; };
config = lib.mkIf config.movOpts.programConfigs.fuzzelConfig.enable { config = lib.mkIf config.movOpts.programConfigs.fuzzelConfig.enable {
programs.fuzzel = { programs.fuzzel = {

View File

@@ -1,7 +1,7 @@
{ lib, config, ... }: { { lib, config, ... }:
{
options = { options = {
movOpts.programConfigs.fzfConfig.enable = movOpts.programConfigs.fzfConfig.enable = lib.mkEnableOption "enables my fzf options";
lib.mkEnableOption "enables my fzf options";
}; };
config = lib.mkIf config.movOpts.programConfigs.fzfConfig.enable { config = lib.mkIf config.movOpts.programConfigs.fzfConfig.enable {
programs.fzf = { programs.fzf = {

View File

@@ -1,7 +1,13 @@
{ lib, config, username, pkgs, ... }: { {
lib,
config,
username,
pkgs,
...
}:
{
options = { options = {
movOpts.programConfigs.gitConfig.enable = movOpts.programConfigs.gitConfig.enable = lib.mkEnableOption "enables my git configuration";
lib.mkEnableOption "enables my git configuration";
}; };
config = lib.mkIf config.movOpts.programConfigs.gitConfig.enable { config = lib.mkIf config.movOpts.programConfigs.gitConfig.enable {
programs.git = { programs.git = {

View File

@@ -1,7 +1,13 @@
{ self, lib, config, pkgs, ... }: { {
self,
lib,
config,
pkgs,
...
}:
{
options = { options = {
movOpts.programConfigs.kittyConfig.enable = movOpts.programConfigs.kittyConfig.enable = lib.mkEnableOption "enables my kitty configuration";
lib.mkEnableOption "enables my kitty configuration";
}; };
config = lib.mkIf config.movOpts.programConfigs.kittyConfig.enable { config = lib.mkIf config.movOpts.programConfigs.kittyConfig.enable {
programs.kitty = { programs.kitty = {
@@ -14,7 +20,7 @@
settings = { settings = {
confirm_os_window_close = 0; confirm_os_window_close = 0;
background_opacity = lib.mkForce 0.5; background_opacity = lib.mkForce 0.65;
window_padding_width = 4; window_padding_width = 4;
scrollback_lines = 10000; scrollback_lines = 10000;
enable_audio_bell = true; enable_audio_bell = true;
@@ -31,6 +37,8 @@
tab_powerline_style = "round"; tab_powerline_style = "round";
}; };
extraConfig = "include ~/.local/state/sysflake/kitty-colors.conf";
keybindings = { keybindings = {
"ctrl+shift+l" = "next_tab"; "ctrl+shift+l" = "next_tab";
"ctrl+shift+h" = "previous_tab"; "ctrl+shift+h" = "previous_tab";

View File

@@ -1,19 +1,18 @@
{ pkgs, self, ... }: { { pkgs, self, ... }:
{
programs.nixvim = { programs.nixvim = {
autoCmd = [ autoCmd = [
{ {
command = "silent! mkview"; command = "silent! mkview";
event = [ "BufWinLeave" ]; event = [ "BufWinLeave" ];
pattern = [ "*" ]; pattern = [ "*" ];
desc = desc = "Save session window settings to be loaded next time the file is opened";
"Save session window settings to be loaded next time the file is opened";
} }
{ {
command = "silent! loadview"; command = "silent! loadview";
event = [ "BufWinEnter" ]; event = [ "BufWinEnter" ];
pattern = [ "*" ]; pattern = [ "*" ];
desc = desc = "Load previous session window settings for the opened file (folds, cursor pos, etc)";
"Load previous session window settings for the opened file (folds, cursor pos, etc)";
} }
{ {
command = "silent! FloatermNew --name=def_term --width=0.8 --height=0.8 --wintype=topright --silent"; command = "silent! FloatermNew --name=def_term --width=0.8 --height=0.8 --wintype=topright --silent";

View File

@@ -1,6 +1,19 @@
{ env, config, pkgs, host, self, ... }: { {
env,
config,
pkgs,
host,
self,
...
}:
{
programs.nixvim = { programs.nixvim = {
nixpkgs.useGlobalPackages = true; nixpkgs.useGlobalPackages = true;
}; };
imports = [ ./plugins ./options.nix ./keymaps.nix ./autocmd.nix ]; imports = [
./plugins
./options.nix
./keymaps.nix
./autocmd.nix
];
} }

View File

@@ -49,7 +49,10 @@
{ {
action = "<cmd>FloatermToggle def_term<CR>"; action = "<cmd>FloatermToggle def_term<CR>";
key = "<F2>"; key = "<F2>";
mode = [ "n" "t" ]; mode = [
"n"
"t"
];
} }
{ {
action = "<cmd>lua require('treesj').toggle()<CR>"; action = "<cmd>lua require('treesj').toggle()<CR>";
@@ -64,82 +67,127 @@
{ {
action = ''"+y''; action = ''"+y'';
key = "<space>y"; key = "<space>y";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action = ''"+p''; action = ''"+p'';
key = "<space>p"; key = "<space>p";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').prompt('test', {submit=true}) end''; action.__raw = /* lua */ "function() require('opencode').prompt('test', {submit=true}) end";
key = "<space>at"; key = "<space>at";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').select() end''; action.__raw = /* lua */ "function() require('opencode').select() end";
key = "<space>as"; key = "<space>as";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').prompt('document', {submit=true}) end''; action.__raw = /* lua */ "function() require('opencode').prompt('document', {submit=true}) end";
key = "<space>ad"; key = "<space>ad";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').prompt('review', {submit=true}) end''; action.__raw = /* lua */ "function() require('opencode').prompt('review', {submit=true}) end";
key = "<space>ar"; key = "<space>ar";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').prompt('fix', {submit=true}) end''; action.__raw = /* lua */ "function() require('opencode').prompt('fix', {submit=true}) end";
key = "<space>af"; key = "<space>af";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').ask("@this ", {submit=true}) end''; action.__raw = /* lua */ ''function() require('opencode').ask("@this ", {submit=true}) end'';
key = "<space>aa"; key = "<space>aa";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').explain("@this ") end''; action.__raw = /* lua */ ''function() require('opencode').explain("@this ") end'';
key = "<space>ae"; key = "<space>ae";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').command("session.half.page.up") end''; action.__raw = /* lua */ ''function() require('opencode').command("session.half.page.up") end'';
key = "<C-S-u>"; key = "<C-S-u>";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').command("session.half.page.down") end''; action.__raw = /* lua */ ''function() require('opencode').command("session.half.page.down") end'';
key = "<C-S-d>"; key = "<C-S-d>";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').command("prompt.clear") end''; action.__raw = /* lua */ ''function() require('opencode').command("prompt.clear") end'';
key = "<C-c>"; key = "<C-c>";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() require('opencode').operator("@this ") end''; action.__raw = /* lua */ ''function() require('opencode').operator("@this ") end'';
key = "go"; key = "go";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
{ {
action.__raw = /*lua*/''function() return require('opencode').operator("@this ") .. "_" end''; action.__raw = /* lua */ ''function() return require('opencode').operator("@this ") .. "_" end'';
key = "goo"; key = "goo";
mode = [ "n" ]; mode = [ "n" ];
} }
{ {
action = "<cmd>lua require('opencode').toggle()<CR>"; action = "<cmd>lua require('opencode').toggle()<CR>";
key = "<C-.>"; key = "<C-.>";
mode = [ "n" "t" ]; mode = [
"n"
"t"
];
} }
{ {
action = "<cmd>lua require('opencode').select()<CR>"; action = "<cmd>lua require('opencode').select()<CR>";
key = "<C-n>"; key = "<C-n>";
mode = [ "n" "x" ]; mode = [
"n"
"x"
];
} }
]; ];
}; };

View File

@@ -1,7 +1,9 @@
{ config, ... }: { config, ... }:
let scheme = config.lib.stylix.colors; let
in { scheme = config.lib.stylix.colors;
in
{
programs.nixvim = { programs.nixvim = {
colorschemes.base16 = { colorschemes.base16 = {
enable = true; enable = true;
@@ -31,14 +33,17 @@ in {
signs = false; signs = false;
}; };
extraConfigLua = /* lua */ '' extraConfigLua = /* lua */ ''
local theme_file = vim.fn.expand("~/.local/state/sysflake/nvim-colors.lua")
if vim.fn.filereadable(theme_file) == 1 then
dofile(theme_file)
end
if vim.g.started_by_firenvim == true then if vim.g.started_by_firenvim == true then
vim.o.laststatus = 0 vim.o.laststatus = 0
end end
if vim.g.neovide then if vim.g.neovide then
vim.g.neovide_refresh_rate = 144 vim.g.neovide_refresh_rate = 144
vim.g.neovide_cursor_animate_in_insert_mode = true vim.g.neovide_cursor_animate_in_insert_mode = true
vim.g.neovide_opacity = 0.5;
vim.g.neovide_normal_opacity = 1.0;
end end
vim.g.vimwiki_list = {{path = '~/vimwiki/', syntax = 'markdown', ext = '.md'}} vim.g.vimwiki_list = {{path = '~/vimwiki/', syntax = 'markdown', ext = '.md'}}

View File

@@ -1,7 +1,7 @@
{ {
programs.nixvim = { programs.nixvim = {
plugins.airline = { plugins.airline = {
enable = false; enable = true;
settings = { settings = {
left_sep = ""; left_sep = "";
right_sep = ""; right_sep = "";

View File

@@ -2,7 +2,9 @@
programs.nixvim = { programs.nixvim = {
plugins.barbar = { plugins.barbar = {
enable = false; enable = false;
settings = { auto_hide = 1; }; settings = {
auto_hide = 1;
};
}; };
}; };
} }

View File

@@ -2,7 +2,9 @@
programs.nixvim = { programs.nixvim = {
plugins.coq-nvim = { plugins.coq-nvim = {
enable = true; enable = true;
settings = { auto_start = false; }; settings = {
auto_start = false;
};
}; };
}; };
} }

View File

@@ -1,4 +1,10 @@
{ host, self, pkgs, env, ... }: {
host,
self,
pkgs,
env,
...
}:
{ {
imports = [ imports = [

View File

@@ -1,4 +1,5 @@
{ pkgs, ... }: { { pkgs, ... }:
{
programs.nixvim = { programs.nixvim = {
extraPlugins = [ extraPlugins = [
(pkgs.vimUtils.buildVimPlugin { (pkgs.vimUtils.buildVimPlugin {

View File

@@ -4,7 +4,9 @@
settings = { settings = {
notification = { notification = {
overrideVimNotify = true; overrideVimNotify = true;
window = { border = "rounded"; }; window = {
border = "rounded";
};
}; };
}; };
}; };

View File

@@ -1,15 +1,16 @@
{ pkgs, ... }: { { pkgs, ... }:
{
programs.nixvim = { programs.nixvim = {
#extraPlugins = [ #extraPlugins = [
#(pkgs.vimUtils.buildVimPlugin { #(pkgs.vimUtils.buildVimPlugin {
#name = "haskell-tools.nvim"; #name = "haskell-tools.nvim";
#src = pkgs.fetchFromGitHub { #src = pkgs.fetchFromGitHub {
#owner = "mrcjkb"; #owner = "mrcjkb";
#repo = "haskell-tools.nvim"; #repo = "haskell-tools.nvim";
#rev = "39c4ced6f1bff1abc8d4df5027efd11ac38c6e6c"; #rev = "39c4ced6f1bff1abc8d4df5027efd11ac38c6e6c";
#hash = "sha256-f+M35EwAlHwjJ2Xs2u9FLnyH0FJT22D0LLShDXCbEEs="; #hash = "sha256-f+M35EwAlHwjJ2Xs2u9FLnyH0FJT22D0LLShDXCbEEs=";
#}; #};
#}) #})
#]; #];
#plugins = { haskell-scope-highlighting.enable = true; }; #plugins = { haskell-scope-highlighting.enable = true; };
}; };

View File

@@ -3,7 +3,7 @@
plugins.indent-blankline = { plugins.indent-blankline = {
enable = true; enable = true;
#settings = { #settings = {
#indent.char = "│"; #indent.char = "│";
#}; #};
}; };
}; };

View File

@@ -61,7 +61,9 @@
}) })
''; '';
}; };
window = { completion.border = "rounded"; }; window = {
completion.border = "rounded";
};
}; };
}; };
lsp = { lsp = {
@@ -98,10 +100,8 @@
}; };
options = { options = {
# uses Xenon config because it has every option exposed to it # uses Xenon config because it has every option exposed to it
nixos.expr = '' nixos.expr = ''(builtins.getFlake "github:pagedMov/nixos-config").nixosConfigurations.phosphorous.options'';
(builtins.getFlake "github:pagedMov/nixos-config").nixosConfigurations.phosphorous.options''; home.expr = ''(builtins.getFlake "github:pagedMov/nixos-config").homeConfigurations.phospohorousHome.options'';
home.expr = ''
(builtins.getFlake "github:pagedMov/nixos-config").homeConfigurations.phospohorousHome.options'';
}; };
}; };
}; };

View File

@@ -1,42 +1,100 @@
let
colors = {
blue = "#80a0ff";
cyan = "#79dac8";
black = "#080808";
white = "#c6c6c6";
red = "#ff5189";
violet = "#d183e8";
grey = "#303030";
bg_grey = "#202020";
};
bubbles_theme = {
normal = {
a = {
fg = colors.black;
bg = colors.violet;
gui = "bold";
};
b = {
fg = colors.white;
bg = colors.grey;
};
c = {
fg = colors.white;
bg = colors.bg_grey;
};
};
insert = {
a = {
fg = colors.black;
bg = colors.blue;
};
};
visual = {
a = {
fg = colors.black;
bg = colors.cyan;
};
};
replace = {
a = {
fg = colors.black;
bg = colors.red;
};
};
inactive = {
a = {
fg = colors.white;
bg = colors.grey;
};
b = {
fg = colors.white;
bg = colors.black;
};
c = {
fg = colors.white;
};
z = {
fg = colors.white;
bg = colors.grey;
};
};
};
in
{ {
programs.nixvim = { programs.nixvim = {
plugins.lualine = { plugins.lualine = {
enable = true; enable = false;
settings = { settings = {
options = { options = {
icons_enabled = true; icons_enabled = true;
theme = "auto"; theme = bubbles_theme;
component_separators = { component_separators = {
left = ""; left = "|";
right = ""; right = "|";
}; };
section_separators = { section_separators = {
left = ""; left = "";
right = ""; right = "";
}; };
always_divide_middle = true;
globalstatus = true;
refresh = {
statusline = 1000;
tabline = 1000;
winbar = 1000;
};
}; };
sections = { sections = {
lualine_a = [ "mode" ]; lualine_a.__raw = "{ { 'mode', separator = { left = '' }, right_padding = 2 } }";
lualine_b = [ "buffers" ]; lualine_b.__raw = "{ 'filename', 'branch' }";
lualine_c = [ ]; lualine_c.__raw = "{}";
lualine_x = [ "searchcount" "fileformat" "filetype" ]; lualine_x.__raw = "{}";
lualine_y = [ "branch" "diff" "diagnostics" ]; lualine_y.__raw = "{ 'filetype', 'progress' }";
lualine_z = [ "location" ]; lualine_z.__raw = "{ { 'location', separator = { right = '' }, left_padding = 2 } }";
}; };
inactive_sections = { inactive_sections = {
lualine_a = [ ]; lualine_a.__raw = "{ { 'mode', separator = { left = '' }, right_padding = 2 } }";
lualine_b = [ ]; lualine_b.__raw = "{ 'filename', 'branch' }";
lualine_c = [ "filename" ]; lualine_c.__raw = "{}";
lualine_x = [ "location" ]; lualine_x.__raw = "{}";
lualine_y = [ ]; lualine_y.__raw = "{ 'filetype', 'progress' }";
lualine_z = [ ]; lualine_z.__raw = "{ { 'location', separator = { right = '' }, left_padding = 2 } }";
}; };
}; };
}; };

View File

@@ -1,8 +1,12 @@
{ {
programs.nixvim = { programs.nixvim = {
plugins = { plugins = {
mini-align = { enable = true; }; mini-align = {
mini-clue = { enable = true; }; enable = true;
};
mini-clue = {
enable = true;
};
}; };
}; };
} }

View File

@@ -2,8 +2,7 @@
programs.nixvim.plugins.neocord = { programs.nixvim.plugins.neocord = {
enable = true; enable = true;
settings = { settings = {
logo = logo = "https://styles.redditmedia.com/t5_30kix/styles/communityIcon_n2hvyn96zwk81.png";
"https://styles.redditmedia.com/t5_30kix/styles/communityIcon_n2hvyn96zwk81.png";
logo_tooltip = "Neovim"; logo_tooltip = "Neovim";
buttons = [ buttons = [
{ {

View File

@@ -2,7 +2,9 @@
programs.nixvim.plugins.nvim-lightbulb = { programs.nixvim.plugins.nvim-lightbulb = {
enable = true; enable = true;
settings = { settings = {
virtual_text = { enable = true; }; virtual_text = {
enable = true;
};
autocmd.enabled = true; autocmd.enabled = true;
sign.enabled = false; sign.enabled = false;
}; };

View File

@@ -15,7 +15,7 @@
markdown-preview.enable = true; markdown-preview.enable = true;
marks.enable = true; marks.enable = true;
nvim-surround.enable = true; nvim-surround.enable = true;
rainbow-delimiters.enable = true; # rainbow-delimiters.enable = true;
render-markdown.enable = true; render-markdown.enable = true;
treesitter.enable = true; treesitter.enable = true;
trim.enable = true; trim.enable = true;

View File

@@ -1 +1,5 @@
{ programs.nixvim.plugins.chatgpt = { enable = true; }; } {
programs.nixvim.plugins.chatgpt = {
enable = true;
};
}

View File

@@ -8,7 +8,9 @@
motion_enabled = 1; motion_enabled = 1;
motion_cursor_end = 1; motion_cursor_end = 1;
matchparen_deferred_hi_surround_always = true; matchparen_deferred_hi_surround_always = true;
matchparen_offscreen = { method = "popup"; }; matchparen_offscreen = {
method = "popup";
};
treesitter = { treesitter = {
enable = true; enable = true;
include_match_words = true; include_match_words = true;

View File

@@ -1,14 +1,22 @@
{ lib, config, username, ... }: {
let home = "/home/${username}"; lib,
in { config,
username,
...
}:
let
home = "/home/${username}";
in
{
options = { options = {
movOpts.programConfigs.passConfig.enable = movOpts.programConfigs.passConfig.enable = lib.mkEnableOption "enables my pass config";
lib.mkEnableOption "enables my pass config";
}; };
config = lib.mkIf config.movOpts.programConfigs.passConfig.enable { config = lib.mkIf config.movOpts.programConfigs.passConfig.enable {
programs.password-store = { programs.password-store = {
enable = true; enable = true;
settings = { PASSWORD_STORE_DIR = "${home}/.password-store"; }; settings = {
PASSWORD_STORE_DIR = "${home}/.password-store";
};
}; };
}; };
} }

View File

@@ -1,7 +1,7 @@
{ lib, config, ... }: { { lib, config, ... }:
{
options = { options = {
movOpts.programConfigs.yaziConfig.enable = movOpts.programConfigs.yaziConfig.enable = lib.mkEnableOption "enables my yazi config";
lib.mkEnableOption "enables my yazi config";
}; };
config = lib.mkIf config.movOpts.programConfigs.yaziConfig.enable { config = lib.mkIf config.movOpts.programConfigs.yaziConfig.enable {
programs.yazi = { programs.yazi = {

View File

@@ -1,4 +1,14 @@
{ inputs, nixpkgs, config, self, username, host, lib, ... }: { {
inputs,
nixpkgs,
config,
self,
username,
host,
lib,
...
}:
{
imports = [ imports = [
./environment/starship.nix ./environment/starship.nix
./environment/userpkgs.nix ./environment/userpkgs.nix

View File

@@ -1,4 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
imports = [ ./jellyfin.nix ]; imports = [ ./jellyfin.nix ];

View File

@@ -1,9 +1,13 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
options = { options = {
movOpts.serverCfg.jellyfinConfig.enable = movOpts.serverCfg.jellyfinConfig.enable = lib.mkEnableOption "Enables the server's jellyfin config";
lib.mkEnableOption "Enables the server's jellyfin config";
}; };
config = lib.mkIf config.movOpts.serverCfg.jellyfinConfig.enable { config = lib.mkIf config.movOpts.serverCfg.jellyfinConfig.enable {
services.jellyfin = { services.jellyfin = {

View File

@@ -1,5 +1,8 @@
{ pkgs, lib, ... }: { pkgs, lib, ... }:
{ {
imports = [ ./cdn ./glasshaus ]; imports = [
./cdn
./glasshaus
];
} }

View File

@@ -1,9 +1,13 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
{ {
options = { options = {
movOpts.serverCfg.caddyConfig.enable = lib.mkEnableOption movOpts.serverCfg.caddyConfig.enable = lib.mkEnableOption "Enable my caddy config for the glasshaus.info domain name";
"Enable my caddy config for the glasshaus.info domain name";
}; };
config = lib.mkIf config.movOpts.serverCfg.caddyConfig.enable { config = lib.mkIf config.movOpts.serverCfg.caddyConfig.enable {
services.caddy = { services.caddy = {

View File

@@ -1,4 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
{ {
imports = [ ./caddy.nix ]; imports = [ ./caddy.nix ];

View File

@@ -1,3 +1,17 @@
{ inputs, nixpkgs, config, self, username, host, lib, ... }: { {
imports = [ ./hardware ./software ./sysenv ]; inputs,
nixpkgs,
config,
self,
username,
host,
lib,
...
}:
{
imports = [
./hardware
./software
./sysenv
];
} }

View File

@@ -1,7 +1,12 @@
{ pkgs, lib, config, ... }: { {
pkgs,
lib,
config,
...
}:
{
options = { options = {
movOpts.hardwareCfg.bootLoader.enable = movOpts.hardwareCfg.bootLoader.enable = lib.mkEnableOption "enables bootloader config";
lib.mkEnableOption "enables bootloader config";
}; };
config = lib.mkIf config.movOpts.hardwareCfg.bootLoader.enable { config = lib.mkIf config.movOpts.hardwareCfg.bootLoader.enable {
boot = { boot = {

View File

@@ -1,8 +1,21 @@
{ inputs, nixpkgs, nixvim, config, self, username, host, ... }: { {
imports = [ (import ./bootloader.nix) ] ++ [ (import ./network.nix) ] inputs,
++ [ (import ./powerprofiles.nix) ] nixpkgs,
++ [ (import ./kernel.nix) ] nixvim,
++ [ (import ./input.nix) ]; config,
self,
username,
host,
...
}:
{
imports = [
(import ./bootloader.nix)
]
++ [ (import ./network.nix) ]
++ [ (import ./powerprofiles.nix) ]
++ [ (import ./kernel.nix) ]
++ [ (import ./input.nix) ];
hardware.keyboard.uhk.enable = true; hardware.keyboard.uhk.enable = true;
} }

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