Compare commits

...

7 Commits

182 changed files with 3682 additions and 1602 deletions

View File

@@ -7,7 +7,7 @@ config here](https://github.com/Frost-Phoenix/nixos-config/tree/catppuccin)
## Gallery ## Gallery
![desktop-neofetch](./assets/screens/desktop-neofetch.png) ![desktop-fastfetch](./assets/screens/desktop-neofetch.png)
![busy-desktop](./assets/screens/desktop-busy.png) ![busy-desktop](./assets/screens/desktop-busy.png)
Screenshots up to date as of [this commit](https://github.com/pagedMov/nixos-config/commit/501aedc11976afe8c5386364c7a6e4b5b73af044) Screenshots up to date as of [this commit](https://github.com/pagedMov/nixos-config/commit/501aedc11976afe8c5386364c7a6e4b5b73af044)

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

@@ -0,0 +1,40 @@
import evdev, random, subprocess, os, threading, socket
active_class = ""
def watch_hyprland():
global active_class
sig = os.environ["HYPRLAND_INSTANCE_SIGNATURE"]
sock_path = f"{os.environ['XDG_RUNTIME_DIR']}/hypr/{sig}/.socket2.sock"
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.connect(sock_path)
for line in s.makefile():
if line.startswith("activewindow>>"):
active_class = line.split(">>")[1].split(",")[0]
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():
d = evdev.InputDevice(path)
if 'keyd virtual keyboard' in d.name:
dev = d
break
d.close()
if dev != None:
for event in dev.read_loop():
if event.type == 1 and event.value == 1 and is_target_window():
if event.code == 28:
subprocess.Popen(['pw-play', '/home/pagedmov/.sysflake/assets/sound/msg_finish.wav'])
elif event.code == 14:
subprocess.Popen(['pw-cat', '--playback', '--volume=0.5', '/home/pagedmov/.sysflake/assets/sound/low_hp.wav'])
elif event.code == 1:
subprocess.Popen(['pw-play', '/home/pagedmov/.sysflake/assets/sound/menu_close.wav'])
else:
pitch = random.randint(-50,50)
subprocess.Popen(['play', '-q', '/home/pagedmov/.sysflake/assets/sound/msg.wav', 'pitch', str(pitch)])

BIN
assets/sound/1_select.ogg Normal file

Binary file not shown.

BIN
assets/sound/2_accept.ogg Normal file

Binary file not shown.

BIN
assets/sound/3_delete.ogg Normal file

Binary file not shown.

BIN
assets/sound/4_select2.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/sound/7_equip.ogg Normal file

Binary file not shown.

BIN
assets/sound/button.wav Normal file

Binary file not shown.

BIN
assets/sound/crystal.wav Normal file

Binary file not shown.

BIN
assets/sound/cursor.wav Normal file

Binary file not shown.

BIN
assets/sound/low_hp.wav Normal file

Binary file not shown.

BIN
assets/sound/menu_close.wav Normal file

Binary file not shown.

BIN
assets/sound/menu_open.wav Normal file

Binary file not shown.

BIN
assets/sound/msg.wav Normal file

Binary file not shown.

BIN
assets/sound/msg_finish.wav Normal file

Binary file not shown.

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

View File

@@ -81,7 +81,7 @@ included in my nixpkgs overlay as custom packages, and these packages are declar
- *Usage*: - *Usage*:
- `vipkg <part of package name>` - `vipkg <part of package name>`
- **Example**: - **Example**:
- `vipkg neofetch` - Opens `nixpkgs/pkgs/tools/misc/neofetch/default.nix`. - `vipkg fastfetch` - Opens `nixpkgs/pkgs/tools/misc/neofetch/default.nix`.
- *Defined in*: `overlay/scripts/commands/vipkg.nix` - *Defined in*: `overlay/scripts/commands/vipkg.nix`
--- ---

318
flake.lock generated
View File

@@ -1,5 +1,26 @@
{ {
"nodes": { "nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"systems": "systems"
},
"locked": {
"lastModified": 1770165109,
"narHash": "sha256-9VnK6Oqai65puVJ4WYtCTvlJeXxMzAp/69HhQuTdl/I=",
"owner": "ryantm",
"repo": "agenix",
"rev": "b027ee29d959fda4b60b57566d64c98a202e0feb",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"aquamarine": { "aquamarine": {
"inputs": { "inputs": {
"hyprutils": [ "hyprutils": [
@@ -20,11 +41,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770895474, "lastModified": 1772292445,
"narHash": "sha256-JBcrq1Y0uw87VZdYsByVbv+GBuT6ECaCNb9txLX9UuU=", "narHash": "sha256-4F1Q7U313TKUDDovCC96m/Za4wZcJ3yqtu4eSrj8lk8=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "a494d50d32b5567956b558437ceaa58a380712f7", "rev": "1dbbba659c1cef0b0202ce92cadfe13bae550e8f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -104,14 +125,14 @@
"copyparty": { "copyparty": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1771834427, "lastModified": 1773005383,
"narHash": "sha256-B1j0ahVuxyZtpbFfy34gk2DjacimPIuzyzCPvDhvxI4=", "narHash": "sha256-Nlln9sKJa1q5lYX4xXS34Lt1oREwgQbT59Aa37nBGkU=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "ab8bd0178b26a0b6c6406f7bae835d13b16ef188", "rev": "266d6e0ae6a6eecac7bc863bd8f746d16686e61a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -120,40 +141,43 @@
"type": "github" "type": "github"
} }
}, },
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744478979,
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"disko": { "disko": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1771881364,
"narHash": "sha256-A5uE/hMium5of/QGC6JwF5TGoDAfpNtW00T0s9u/PN8=",
"owner": "nix-community",
"repo": "disko",
"rev": "a4cb7bf73f264d40560ba527f9280469f1f081c6",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"fern": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1771899927, "lastModified": 1773025010,
"narHash": "sha256-HKBWp3eiDsm9XjmC5ppqjbfI9Wldg2LjBz1zZXIL6l8=", "narHash": "sha256-khlHllTsovXgT2GZ0WxT4+RvuMjNeR5OW0UYeEHPYQo=",
"owner": "km-clay", "owner": "nix-community",
"repo": "fern", "repo": "disko",
"rev": "62d651eb8df535c0176b254f6dee25d176d0aeff", "rev": "7b9f7f88ab3b339f8142dc246445abb3c370d3d3",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "km-clay", "owner": "nix-community",
"repo": "fern", "repo": "disko",
"type": "github" "type": "github"
} }
}, },
@@ -248,7 +272,7 @@
}, },
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1731533236, "lastModified": 1731533236,
@@ -324,15 +348,36 @@
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"agenix",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1771851181, "lastModified": 1745494811,
"narHash": "sha256-gFgE6mGUftwseV3DUENMb0k0EiHd739lZexPo5O/sdQ=", "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "9a4b494b1aa1b93d8edf167f46dc8e0c0011280c", "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1773093840,
"narHash": "sha256-u/96NoAyN8BSRuM3ZimGf7vyYgXa3pLx4MYWjokuoH4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "bb014746edb2a98d975abde4dd40fa240de4cf86",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -434,11 +479,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1771865886, "lastModified": 1773082851,
"narHash": "sha256-hqoGotv4iNiYmIzQtBQziDANCEQ1L1vtsGODtJGlBgM=", "narHash": "sha256-4zkUP+gZF6zveHFN0W3oX750mpVgxfiShL+ZcvcH244=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "bc09504ea50901bedf945859bf7bd4c739e1ed38", "rev": "e32eeb1d454b029a24ca71f410896bf52839085d",
"revCount": 6916, "revCount": 7010,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -536,11 +581,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767983607, "lastModified": 1771866172,
"narHash": "sha256-8C2co8NYfR4oMOUEsPROOJ9JHrv9/ktbJJ6X1WsTbXc=", "narHash": "sha256-fYFoXhQLrm1rD8vSFKQBOEX4OGCuJdLt1amKfHd5GAw=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "d4037379e6057246b408bbcf796cf3e9838af5b2", "rev": "0b219224910e7642eb0ed49f0db5ec3d008e3e41",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -557,11 +602,11 @@
"systems": "systems_3" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1770751064, "lastModified": 1772469529,
"narHash": "sha256-Q9t7TR05XwLnOFDxsExVjiL3337zs99jqhvcqIzgc8o=", "narHash": "sha256-MU+qYyk/imRJTl9MXnfaA22EnYqZNXxdNpZAe4vrfWA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprpicker", "repo": "hyprpicker",
"rev": "089dd8a448c12e1066486892de096590cddb4195", "rev": "7ba3edd96702ab6897cdaa82547894589a553e4f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -634,11 +679,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770139857, "lastModified": 1771271487,
"narHash": "sha256-bCqxcXjavgz5KBJ/1CBLqnagMMf9JvU1m9HmYVASKoc=", "narHash": "sha256-41gEiUS0Pyw3L/ge1l8MXn61cK14VAhgWB/JV8s/oNI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "9038eec033843c289b06b83557a381a2648d8fa5", "rev": "340a792e3b3d482c4ae5f66d27a9096bdee6d76d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -659,11 +704,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1749135356, "lastModified": 1772459870,
"narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", "narHash": "sha256-xxkK2Cvqxpf/4UGcJ/TyCwrvmiNWsKsJfFzHMp2bxis=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", "rev": "e63f3a79334dec49f8eb1691f66f18115df04085",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -709,11 +754,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1749145760, "lastModified": 1772459835,
"narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", "narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", "rev": "0a692d4a645165eebd65f109146b8861e3a925e7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -738,11 +783,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770203293, "lastModified": 1771606233,
"narHash": "sha256-PR/KER+yiHabFC/h1Wjb+9fR2Uy0lWM3Qld7jPVaWkk=", "narHash": "sha256-F3PLUqQ/TwgR70U+UeOqJnihJZ2EuunzojYC4g5xHr0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwire", "repo": "hyprwire",
"rev": "37bc90eed02b0c8b5a77a0b00867baf3005cfb98", "rev": "06c7f1f8c4194786c8400653c4efc49dc14c0f3a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -752,6 +797,38 @@
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": {
"lastModified": 1754028485,
"narHash": "sha256-IiiXB3BDTi6UqzAZcf2S797hWEPCRZOwyNThJIYhUfk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "59e69648d345d6e8fef86158c555730fa12af9de",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_10": {
"locked": {
"lastModified": 1767767207,
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1748162331, "lastModified": 1748162331,
"narHash": "sha256-rqc2RKYTxP3tbjA+PB3VMRQNnjesrT0pEofXQTrMsS8=", "narHash": "sha256-rqc2RKYTxP3tbjA+PB3VMRQNnjesrT0pEofXQTrMsS8=",
@@ -766,13 +843,13 @@
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs_2": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1771207753, "lastModified": 1772771118,
"narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=", "narHash": "sha256-xWzaTvmmACR/SRWtABgI/Z97lcqwJAeoSd5QW1KdK1s=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d1c15b7d5806069da59e819999d70e1cec0760bf", "rev": "e38213b91d3786389a446dfce4ff5a8aaf6012f2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -782,22 +859,6 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": {
"locked": {
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1712163089, "lastModified": 1712163089,
@@ -816,11 +877,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1770841267, "lastModified": 1772198003,
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=", "narHash": "sha256-I45esRSssFtJ8p/gLHUZ1OUaaTaVLluNkABkk6arQwE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae", "rev": "dd9b079222d43e1943b6ebd802f04fd959dc8e61",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -832,11 +893,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1748929857, "lastModified": 1772433332,
"narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", "narHash": "sha256-izhTDFKsg6KeVBxJS9EblGeQ8y+O8eCa6RcW874vxEc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", "rev": "cf59864ef8aa2e178cccedbe2c178185b0365705",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -848,16 +909,16 @@
}, },
"nixpkgs_7": { "nixpkgs_7": {
"locked": { "locked": {
"lastModified": 1771369470, "lastModified": 1772956932,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", "narHash": "sha256-M0yS4AafhKxPPmOHGqIV0iKxgNO8bHDWdl1kOwGBwRY=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb", "rev": "608d0cadfed240589a7eea422407a547ad626a14",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-unstable", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@@ -880,15 +941,15 @@
}, },
"nixpkgs_9": { "nixpkgs_9": {
"locked": { "locked": {
"lastModified": 1767767207, "lastModified": 1771848320,
"narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=", "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=",
"owner": "NixOS", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5912c1772a44e31bf1c63c0390b90501e5026886", "rev": "2fc6539b481e1d2569f25f8799236694180c0993",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "nixos",
"ref": "nixos-unstable", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
@@ -901,11 +962,11 @@
"systems": "systems_4" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1771135771, "lastModified": 1772402258,
"narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=", "narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba", "rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -949,11 +1010,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1770726378, "lastModified": 1772024342,
"narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=", "narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae", "rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -964,32 +1025,52 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix",
"copyparty": "copyparty", "copyparty": "copyparty",
"disko": "disko", "disko": "disko",
"fern": "fern", "home-manager": "home-manager_2",
"home-manager": "home-manager",
"hypr-contrib": "hypr-contrib", "hypr-contrib": "hypr-contrib",
"hyprland": "hyprland", "hyprland": "hyprland",
"hyprpicker": "hyprpicker", "hyprpicker": "hyprpicker",
"nixpkgs": "nixpkgs_7", "nixpkgs": "nixpkgs_7",
"nixvim": "nixvim", "nixvim": "nixvim",
"shed": "shed",
"spicetify-nix": "spicetify-nix", "spicetify-nix": "spicetify-nix",
"stylix": "stylix" "stylix": "stylix"
} }
}, },
"shed": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_9"
},
"locked": {
"lastModified": 1773107703,
"narHash": "sha256-Zf2Z7p2tEC+HjIqVoEyd/bLypqUdNdkNCuAg4OnNcIg=",
"owner": "km-clay",
"repo": "shed",
"rev": "85e5fc28754849ce690ff583249381f9c7a91fb9",
"type": "github"
},
"original": {
"owner": "km-clay",
"repo": "shed",
"type": "github"
}
},
"spicetify-nix": { "spicetify-nix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
"systems": "systems_5" "systems": "systems_6"
}, },
"locked": { "locked": {
"lastModified": 1771737804, "lastModified": 1773007504,
"narHash": "sha256-7wn9qbzIQQgH8tnq4VwzuWEqEWpekuymlLyhY3vM/j8=", "narHash": "sha256-4NtiCDH3RunKbrlWvPCB6dyTjCwqdrHaBDeMCzG6gIA=",
"owner": "gerg-l", "owner": "gerg-l",
"repo": "spicetify-nix", "repo": "spicetify-nix",
"rev": "6dd43010ac2458cc56a6ac5250349b9217a7a2ae", "rev": "434e63b851f9139aaeddc3b8de44d47992828b3b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1007,9 +1088,9 @@
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts_2",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"nixpkgs": "nixpkgs_9", "nixpkgs": "nixpkgs_10",
"nur": "nur", "nur": "nur",
"systems": "systems_6", "systems": "systems_7",
"tinted-foot": "tinted-foot", "tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty", "tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes", "tinted-schemes": "tinted-schemes",
@@ -1017,11 +1098,11 @@
"tinted-zed": "tinted-zed" "tinted-zed": "tinted-zed"
}, },
"locked": { "locked": {
"lastModified": 1771787992, "lastModified": 1772296853,
"narHash": "sha256-Vg4bGwwenNYI8p3nJTl9FRyeIyrjATeZrZr+GyUSDrw=", "narHash": "sha256-pAtzPsgHRKw/2Kv8HgAjSJg450FDldHPWsP3AKG/Xj0=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "30054cca073b49b42a71289edec858f535b27fe9", "rev": "c4b8e80a1020e09a1f081ad0f98ce804a6e85acf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1120,6 +1201,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_7": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": { "tinted-foot": {
"flake": false, "flake": false,
"locked": { "locked": {

View File

@@ -2,13 +2,15 @@
description = "pagedMov's NixOS and Home Manager configuration"; description = "pagedMov's NixOS and Home Manager configuration";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; #nixpkgs.url = "github:nixos/nixpkgs/a5ebaf35f8930361787bb491d49fc2e807e6d51e";
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
hypr-contrib.url = "github:hyprwm/contrib"; hypr-contrib.url = "github:hyprwm/contrib";
copyparty.url = "github:9001/copyparty"; copyparty.url = "github:9001/copyparty";
hyprpicker.url = "github:hyprwm/hyprpicker"; hyprpicker.url = "github:hyprwm/hyprpicker";
stylix.url = "github:danth/stylix"; stylix.url = "github:danth/stylix";
disko.url = "github:nix-community/disko"; disko.url = "github:nix-community/disko";
fern.url = "github:km-clay/fern"; shed.url = "github:km-clay/shed";
agenix.url = "github:ryantm/agenix";
nixvim.url = "github:nix-community/nixvim"; nixvim.url = "github:nix-community/nixvim";
@@ -29,7 +31,8 @@
}; };
}; };
outputs = { ... }@inputs: outputs =
{ ... }@inputs:
let let
movLib = import ./lib { movLib = import ./lib {
inherit inputs; inherit inputs;
@@ -47,32 +50,26 @@
hostDir = "laptop"; hostDir = "laptop";
kind = "both"; kind = "both";
} }
{
host = "xenon";
hostDir = "server";
kind = "both";
extraNixosModules = [
./modules/server
];
}
{ {
host = "phosphorous"; host = "phosphorous";
hostDir = "work"; hostDir = "work";
kind = "both"; kind = "both";
extraNixosModules = [ extraNixosModules = [
inputs.fern.nixosModules.fern inputs.shed.nixosModules.shed
inputs.copyparty.nixosModules.default inputs.copyparty.nixosModules.default
inputs.agenix.nixosModules.default
]; ];
extraHomeModules = [ extraHomeModules = [
inputs.fern.homeModules.fern inputs.shed.homeModules.shed
]; ];
extraOverlays = [ extraOverlays = [
inputs.fern.overlays.default inputs.shed.overlays.default
inputs.copyparty.overlays.default inputs.copyparty.overlays.default
]; ];
} }
]; ];
in { in
{
inherit (hosts) nixosConfigurations homeConfigurations; inherit (hosts) nixosConfigurations homeConfigurations;
}; };
} }

View File

@@ -1,7 +1,12 @@
{ inputs, pkgs, username, ... }: {
inputs,
pkgs,
username,
...
}:
let let
fern = inputs.fern.packages.${pkgs.stdenv.hostPlatform.system}.default; shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default;
in in
{ {
imports = [ ./hardware.nix ]; imports = [ ./hardware.nix ];
@@ -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 = {
@@ -42,8 +53,13 @@ in
${username} = { ${username} = {
isNormalUser = true; isNormalUser = true;
initialPassword = "1234"; initialPassword = "1234";
shell = fern; shell = shed;
extraGroups = [ "input" "wheel" "persist" "libvirtd" ]; extraGroups = [
"input"
"wheel"
"persist"
"libvirtd"
];
}; };
}; };
}; };

View File

@@ -1,27 +1,43 @@
# 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,55 +0,0 @@
{ pkgs, username, ... }: {
imports = [ ./hardware.nix ];
movOpts = {
sysEnv = {
issue.enable = true;
sddmConfig.enable = true;
stylixConfig.enable = true;
nixSettings.enable = true;
};
hardwareCfg = {
networkModule.enable = true;
bootLoader.enable = true;
powerProfiles.enable = true;
};
softwareCfg = {
sysPkgs.enable = true;
sysProgs.enable = true;
sysServices.enable = true;
};
serverCfg = {
jellyfinConfig.enable = true;
caddyConfig.enable = true;
};
};
networking.firewall = { allowedTCPPorts = [ 443 8920 ]; };
environment = {
etc."tmpfiles.d/home-permissions.conf".text = ''
d /home/pagedmov 0750 pagedmov users -
'';
variables = {
PATH = "${pkgs.clang-tools}/bin:$PATH";
TERM = "kitty";
};
shells = with pkgs; [ zsh bash ];
};
users = {
groups.persist = { };
users = {
root.initialPassword = "1234";
${username} = {
isNormalUser = true;
initialPassword = "1234";
shell = pkgs.zsh;
extraGroups = [ "wheel" "persist" "libvirtd" ];
};
};
};
security.sudo.extraConfig = ''
${username} ALL=(ALL) NOPASSWD: /etc/profiles/per-user/${username}/bin/rebuild
'';
nix.settings.allowed-users = [ "${username}" ];
time.timeZone = "America/New_York";
}

View File

@@ -1,49 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules =
[ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/c40b3b09-688d-4fe3-96f9-8e3d75b0a7b7";
fsType = "ext4";
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/1048d206-0a27-4e4e-b9a4-4f068bab5439";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/357E-BCCD";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/b53ab583-f32e-4144-a2ee-f341e54f8233";
fsType = "ext4";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp10s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp11s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@@ -1,39 +0,0 @@
{ host, pkgs, self, inputs, lib, username, config, ... }: {
home.username = "${username}";
home.homeDirectory =
"/home/${username}";
home.stateVersion =
"24.05";
programs.home-manager.enable = true;
movOpts = {
homeFiles.enable = true;
# modules/home/environment
envConfig = {
starshipConfig.enable = true;
stylixHomeConfig.enable = true;
userPkgs.enable = true;
zshConfig = {
shellAliases.enable = true;
envVariables.enable = true;
shellOptions.enable = true;
extraConfig.enable = true;
};
};
# modules/home/programs
programConfigs = {
autojumpConfig.enable = true;
kittyConfig.enable = true;
btopConfig.enable = true;
ezaConfig.enable = true;
fzfConfig.enable = true;
gitConfig.enable = true;
yaziConfig.enable = true;
batConfig.enable = true;
};
};
}

View File

@@ -1,7 +1,12 @@
{ inputs, pkgs, username, ... }: {
inputs,
pkgs,
username,
...
}:
let let
fern = inputs.fern.packages.${pkgs.stdenv.hostPlatform.system}.default; shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default;
in in
{ {
imports = [ imports = [
@@ -33,11 +38,21 @@ 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.fern.enable = true; programs.shed.enable = true;
services.udev.extraRules = ''
KERNEL=="event*", SUBSYSTEM=="input", MODE="0664", GROUP="input"
'';
users = { users = {
groups.persist = { }; groups.persist = { };
@@ -47,8 +62,14 @@ in
${username} = { ${username} = {
isNormalUser = true; isNormalUser = true;
initialPassword = "1234"; initialPassword = "1234";
shell = pkgs.fern; 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 =
@@ -40,7 +45,8 @@ let
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
@@ -53,7 +59,8 @@ let
# Optional: link compat # Optional: link compat
stdenv.cc.cc.lib stdenv.cc.cc.lib
]; ];
multiPkgs = pkgs: with pkgs.pkgsi686Linux; [ multiPkgs =
pkgs: with pkgs.pkgsi686Linux; [
glibc glibc
zlib zlib
ncurses5 ncurses5
@@ -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,40 +1,67 @@
# 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 { (
acc: host:
let
result = mkHost ({ inherit inputs username nixpkgsConfig; } // host);
in
{
nixosConfigurations = acc.nixosConfigurations // result.nixosConfigurations; nixosConfigurations = acc.nixosConfigurations // result.nixosConfigurations;
homeConfigurations = acc.homeConfigurations // result.homeConfigurations; homeConfigurations = acc.homeConfigurations // result.homeConfigurations;
}) }
{ nixosConfigurations = {}; homeConfigurations = {}; } )
{
nixosConfigurations = { };
homeConfigurations = { };
}
hosts; hosts;
} }

View File

@@ -1,7 +1,9 @@
{ {
inputs, inputs,
username, username,
nixpkgsConfig ? { allowUnfree = true; }, nixpkgsConfig ? {
allowUnfree = true;
},
host, host,
hostDir, hostDir,
system ? "x86_64-linux", system ? "x86_64-linux",
@@ -9,7 +11,7 @@
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;
@@ -57,5 +71,6 @@ let
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
./fern
./swaync.nix ./swaync.nix
./hyprland.nix ./hyprland.nix
./waybar.nix ./waybar.nix
./zsh
./shed
./paperd
]; ];
} }

View File

@@ -1,185 +0,0 @@
{ lib, config, self, pkgs, ... }:
let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
color-commit = "${pkgs.myScripts.color-commit}/bin/color-commit";
sndpath = "${self}/assets/sound";
in
{
programs.fern = {
settings.extraPreConfig = ''
prompt_topline() {
local last_cmd_status
local last_cmd_runtime
if [ "$?" -eq "0" ]; then
last_cmd_status="\e[1;32m\e[0m"
else
last_cmd_status="\e[1;31m\e[0m"
fi
local user_and_host="\e[1m$USER\e[1;36m@\e[1;31m$HOST\e[0m"
local last_runtime_raw="$(echo -p "\t")"
if [ -z "$last_runtime_raw" ]; then
last_cmd_runtime=""
last_cmd_status=""
else
last_cmd_runtime="\e[1;38;2;249;226;175m󰔛 $(echo -p "\T")\e[0m"
fi
echo -n "$user_and_host $last_cmd_runtime $last_cmd_status\n"
}
prompt_midline() {
git rev-parse --is-inside-work-tree > /dev/null 2>&1 || return
local gitsigns
local status="$(git status --porcelain 2>/dev/null)"
[ -n "$status" ] && echo "$status" | command grep -q '^ [MADR]' && gitsigns="$gitsigns!"
[ -n "$status" ] && echo "$status" | command grep -q '^??' && gitsigns="$gitsigns?"
[ -n "$status" ] && echo "$status" | command grep -q '^[MADR]' && gitsigns="$gitsigns+"
local ahead="$(git rev-list --count @{upstream}..HEAD 2>/dev/null)"
local behind="$(git rev-list --count HEAD..@{upstream} 2>/dev/null)"
[ $ahead -gt 0 ] && gitsigns="$gitsigns"
[ $behind -gt 0 ] && gitsigns="$gitsigns"
local branch="$(git branch --show-current 2>/dev/null)"
if [ -n "$gitsigns" ] || [ -n "$branch" ]; then
if [ -n "$gitsigns" ]; then
gitsigns="\e[1;31m[$gitsigns]"
fi
echo -n "\e[0mon \e[1;35m ''${branch}$gitsigns\e[0m\n"
fi
}
prompt_botline() {
echo -p "\e[1;36m\W\e[1;32m/"
}
prompt() {
local top="$(prompt_topline)"
local mid="$(prompt_midline)"
local bot="$(prompt_botline)"
local dollar="$(echo -p "\$ ")"
local dollar="$(echo -e "\e[1;32m$dollar\e[0m")"
local prompt="$top$mid$bot\n$dollar"
echo -en "$prompt"
}
export PS1="\n\!prompt "
'';
settings.extraPostConfig = ''
encrypt() {
if [ -z "$1" ]; then
echo "Usage: encrypt <text> [recipient]"
return 1
fi
if [ -z "$2" ]; then
gpg --encrypt --armor -r "$1"
else
echo "$1" | gpg --encrypt --armor -r "$2"
fi
}
decrypt() {
if [ -z "$1" ]; then
gpg --decrypt --quiet 2>/dev/null
else
echo "$1" | gpg --decrypt --quiet
fi
}
viflake() {
(
while ! [ -f ./flake.nix ]; do
builtin cd ..
if [ "$PWD" = "/" ]; then
echo "No flake.nix found in this directory or any parent directories."
return 1
fi
done
nvim ./flake.nix
)
}
nvim() {
${shellsound} ${sndpath}/nvim.wav
command nvim "$@"
}
neovide() {
${shellsound} ${sndpath}/nvim.wav
command neovide "$@"
}
grimblast() {
if command grimblast "$@"; then
${shellsound} ${sndpath}/screenshot.wav
fi
}
gitcheckout_sfx() {
if git checkout "$@"; then
${shellsound} ${sndpath}/gitcheckout.wav
else
${shellsound} ${sndpath}/error.wav
fi
}
gitrebase_sfx() {
if git rebase "$@"; then
${shellsound} ${sndpath}/gitrebase.wav
else
${shellsound} ${sndpath}/error.wav
fi
}
gitcommit_sfx() {
local output="$(git commit "$@")"
if [ "$?" -eq "0" ]; then
${shellsound} ${sndpath}/gitcommit.wav
echo "$output" | ${color-commit}
return 0
else
${shellsound} ${sndpath}/error.wav
echo "$output"
return 1
fi
}
gitpush_sfx() {
if git push "$@"; then
${shellsound} ${sndpath}/gitpush.wav
else
${shellsound} ${sndpath}/error.wav
fi
}
gitpull_sfx() {
if git pull "$@"; then
${shellsound} ${sndpath}/gitpull.wav
else
${shellsound} ${sndpath}/error.wav
fi
}
ls() {
eza -1 --group-directories-first --icons "$@"
${shellsound} ${sndpath}/ls.wav
}
mkcd() {
command mkdir -p "$1" && builtin cd "$1"
}
cd() {
eza -1 --group-directories-first --icons "$@" 2> /dev/null
builtin cd "$@"
${shellsound} ${sndpath}/cd.wav
}
vipe() {
local tmp=$(mktemp)
$EDITOR "$tmp" >/dev/tty </dev/tty
cat "$tmp"
rm "$tmp"
}
if [ "$0" = "-fern" ]; then
${shellsound} $FLAKEPATH/assets/sound/login.wav
fi
'';
};
}

View File

@@ -1,12 +1,16 @@
{ 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

View File

@@ -1,7 +1,16 @@
{ 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, print, exec, grimblast copy area"
"super shift, print, exec, grimblast --freeze copy area" "super shift, print, exec, grimblast --freeze copy area"
@@ -13,17 +22,25 @@ let
]; ];
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]"
]; #];
in { hostWorkspaces =
if (host == "phosphorous") then
[
"m[DP-3], layoutopt:orientation:top"
]
else
[ ];
in
{
options = { options = {
movOpts.envConfig.hyprlandConfig = { movOpts.envConfig.hyprlandConfig = {
@@ -36,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"
];
}; };
}; };
}; };
@@ -53,22 +73,31 @@ 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 =
if (host == "oganesson") then
[
"DP-1, 1920x1080@144, 1920x0, 1" "DP-1, 1920x1080@144, 1920x0, 1"
"HDMI-A-1, 1920x1080, 0x0, 1" "HDMI-A-1, 1920x1080, 0x0, 1"
] else if (host == "phosphorous") then [ ]
else if (host == "phosphorous") then
[
"DP-1, highrr, 0x0, 1" "DP-1, highrr, 0x0, 1"
"DP-3, highrr, -1080x-420, 1, transform, 3" "DP-3, highrr, -1080x-420, 1, transform, 3"
] else ]
else
[ "eDP-1, 1600x900, 0x0, 1" ]; [ "eDP-1, 1600x900, 0x0, 1" ];
exec-once = [ exec-once = [
@@ -82,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 = (if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then [ workspace =
hostWorkspaces
++ (
if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 0}" "1,persistent=true,monitor:${builtins.elemAt mons 0}"
"2,persistent=true,monitor:${builtins.elemAt mons 0}" "2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}" "3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 1}" "4,persistent=true,monitor:${builtins.elemAt mons 1}"
"5,persistent=true,monitor:${builtins.elemAt mons 1}" "5,persistent=true,monitor:${builtins.elemAt mons 1}"
"6,persistent=true,monitor:${builtins.elemAt mons 1}" "6,persistent=true,monitor:${builtins.elemAt mons 1}"
] else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "singlemonitor") then [ ]
else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "singlemonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 0} " "1,persistent=true,monitor:${builtins.elemAt mons 0} "
"2,persistent=true,monitor:${builtins.elemAt mons 0}" "2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}" "3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 0}" "4,persistent=true,monitor:${builtins.elemAt mons 0}"
] else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "trimonitor") then [ ]
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"
@@ -109,8 +149,7 @@ 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 = [
@@ -138,14 +177,19 @@ in {
"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 )$"
"opacity 0.8, match:title ^(Neovide)$"
"move 100%-470 15, match:title ^(Firefox Sharing Indicator)$" "move 100%-470 15, match:title ^(Firefox Sharing Indicator)$"
"move 100%-470 15, match:title ^(Firefox )$" "move 100%-470 15, match:title ^(Firefox )$"
] ++ smartGapsWindowrules; ];
cursor = {
no_hardware_cursors = true;
};
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;
}; };
@@ -155,7 +199,7 @@ in {
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 = "dwindle"; layout = "master";
resize_on_border = true; resize_on_border = true;
snap = { snap = {
@@ -179,7 +223,6 @@ in {
}; };
dwindle = { dwindle = {
force_split = 2;
pseudotile = "yes"; pseudotile = "yes";
preserve_split = "yes"; preserve_split = "yes";
}; };
@@ -187,15 +230,23 @@ in {
master = { master = {
new_status = "master"; new_status = "master";
special_scale_factor = 1; special_scale_factor = 1;
mfact = 0.65;
new_on_top = true;
}; };
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;
}; };
}; };
@@ -233,17 +284,16 @@ in {
"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, togglesplit, # dwindle" "super, b, layoutmsg, togglesplit, # dwindle"
"super, comma, exec, hyprctl dispatch layoutmsg rollnext; hyprctl dispatch layoutmsg focusmaster"
"super, period, exec, hyprctl dispatch layoutmsg rollprev; hyprctl dispatch layoutmsg focusmaster"
"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, u, exec, /home/pagedmov/splitman-ipc.sh split"
"super, i, exec, /home/pagedmov/splitman-ipc.sh stop"
"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"
@@ -263,9 +313,12 @@ in {
"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(os.environ.get("XDG_RUNTIME_DIR", "/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,13 +1,19 @@
{ lib, config, pkgs, self, ... }:
{ {
programs.fern = { lib,
config,
pkgs,
self,
...
}:
{
programs.shed = {
aliases = { aliases = {
mv = "mv -v"; mv = "mv -v";
cp = "cp -vr"; cp = "cp -vr";
gt = "gtrash"; gt = "gtrash";
gtp = "${pkgs.myScripts.playshellsound}/bin/playshellsound ${self}/assets/sound/rm.wav && gtrash put"; gtp = "${pkgs.myScripts.playshellsound}/bin/playshellsound ${self}/assets/sound/rm.wav && gtrash put";
diff = "diff --color=auto"; diff = "diff --color=auto";
sr = "source ~/.fernrc"; sr = "source ~/.shedrc";
psg = "ps aux | grep -v grep | grep -i -e VSZ -e"; psg = "ps aux | grep -v grep | grep -i -e VSZ -e";
mkdir = "mkdir -p"; mkdir = "mkdir -p";
pk = "pkill -9 -f"; pk = "pkill -9 -f";
@@ -20,14 +26,17 @@
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";
ga = "playshellsound ${self}/assets/sound/gitadd.wav; git add"; ga = "playshellsound ${self}/assets/sound/gitadd.wav; git add";
gcomm = "gitcommit_sfx"; gcomm = "gitcommit_sfx";
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

@@ -0,0 +1,24 @@
{ self, pkgs, ... }:
let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
color-commit = "${pkgs.myScripts.color-commit}/bin/color-commit";
sndpath = "${self}/assets/sound";
in
{
programs.shed = {
autocmds = [
{
hooks = [ "post-cmd" ];
command = "export PROMPT_GIT_LINE=\"$(prompt_git_line)\"";
}
{
hooks = [ "on-history-open" ];
command = ''[ -n "$_NUM_MATCHES" ] && [ "$_NUM_MATCHES" -gt 0 ] && ${shellsound} "${sndpath}/nvim.wav"; fi'';
}
{
hooks = [ "on-completion-start" ];
command = ''[ -n "$_NUM_MATCHES" ] && [ "$_NUM_MATCHES" -gt 1 ] && ${shellsound} "${sndpath}/nvim.wav"; fi'';
}
];
};
}

View File

@@ -0,0 +1,15 @@
{ lib, config, ... }:
{
programs.shed = {
extraCompletion = {
cargo = {
wordList = [
"build"
"test"
"run"
"clippy"
];
};
};
};
}

View File

@@ -3,8 +3,12 @@
{ {
imports = [ imports = [
./env.nix ./env.nix
./complete.nix
./aliases.nix ./aliases.nix
./extraconfig.nix ./extraconfig.nix
./options.nix ./options.nix
./keymaps.nix
./functions.nix
./autocmd.nix
]; ];
} }

View File

@@ -1,6 +1,6 @@
{ lib, config, ... }: { lib, config, ... }:
{ {
programs.fern = { programs.shed = {
environmentVars = { environmentVars = {
SOUNDS_ENABLED = "true"; SOUNDS_ENABLED = "true";
EDITOR = "nvim"; EDITOR = "nvim";

View File

@@ -0,0 +1,28 @@
{
lib,
config,
self,
pkgs,
...
}:
let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
color-commit = "${pkgs.myScripts.color-commit}/bin/color-commit";
sndpath = "${self}/assets/sound";
in
{
programs.shed = {
settings.extraPostConfig = /* bash */ ''
export PS1="\@prompt "
export PSR='\e[36;1m$\@shed_ver\e[0m'
export PROMPT_GIT_LINE="$(prompt_git_line)"
if [ "$0" = "-shed" ]; then
${shellsound} $FLAKEPATH/assets/sound/login.wav
fi
if [ -n "$LS_COLORS" ]; then unset LS_COLORS; fi
'';
};
}

View File

@@ -0,0 +1,302 @@
{ self, pkgs, ... }:
let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
color-commit = "${pkgs.myScripts.color-commit}/bin/color-commit";
sndpath = "${self}/assets/sound";
in
{
programs.shed = {
functions = {
prompt_topline = /* bash */ ''
local user_and_host="\e[0m\e[1m$USER\e[1;36m@\e[1;31m$HOST\e[0m"
local mode_text="$(prompt_mode)"
echo -n "\e[1;34m $user_and_host $mode_text\n"
'';
prompt_mode = /* bash */ ''
local mode=""
local normal_fg='\e[0m\e[30m\e[1;43m'
local normal_bg='\e[0m\e[33m'
local insert_fg='\e[0m\e[30m\e[1;46m'
local insert_bg='\e[0m\e[36m'
local command_fg='\e[0m\e[30m\e[1;42m'
local command_bg='\e[0m\e[32m'
local visual_fg='\e[0m\e[30m\e[1;45m'
local visual_bg='\e[0m\e[35m'
local replace_fg='\e[0m\e[30m\e[1;41m'
local replace_bg='\e[0m\e[31m'
local search_fg='\e[0m\e[30m\e[1;47m'
local search_bg='\e[0m\e[39m'
local complete_fg='\e[0m\e[30m\e[1;47m'
local complete_bg='\e[0m\e[39m'
case "$SHED_VI_MODE" in
"NORMAL")
mode="$normal_bg''${normal_fg}NORMAL$normal_bg\e[0m"
;;
"INSERT")
mode="$insert_bg''${insert_fg}INSERT$insert_bg\e[0m"
;;
"COMMAND")
mode="$command_bg''${command_fg}COMMAND$command_bg\e[0m"
;;
"VISUAL")
mode="$visual_bg''${visual_fg}VISUAL$visual_bg\e[0m"
;;
"REPLACE")
mode="$replace_bg''${replace_fg}REPLACE$replace_bg\e[0m"
;;
"VERBATIM")
mode="$replace_bg''${replace_fg}VERBATIM$replace_bg\e[0m"
;;
"COMPLETE")
mode="$complete_bg''${complete_fg}COMPLETE$complete_bg\e[0m"
;;
"SEARCH")
mode="$search_bg''${search_fg}SEARCH$search_bg\e[0m"
;;
*)
mode=""
;;
esac
echo -en "$mode\n"
'';
prompt_stat_line = /* bash */ ''
local last_exit_code="$?"
local last_cmd_status
local last_cmd_runtime
if [ "$last_exit_code" -eq "0" ]; then
last_cmd_status="\e[1;32m"
else
last_cmd_status="\e[1;31m"
fi
local last_runtime_raw="$(echo -p "\t")"
if [ -z "$last_runtime_raw" ]; then
return 0
else
last_cmd_runtime="\e[1;38;2;249;226;175m󰔛 ''${last_cmd_status}$(echo -p "\T")\e[0m"
fi
echo -n "\e[1;34m $last_cmd_runtime\e[0m\n"
'';
prompt_git_line = /* bash */ ''
local status="$(git status --porcelain -b 2>/dev/null)" || return
local branch="" gitsigns="" ahead=0 behind=0
local header="''${status%%$'\n'*}"
branch="''${header#\#\# }"
branch="''${branch%%...*}"
case "$header" in
*ahead*) ahead="''${header#*ahead }"; ahead="''${ahead%%[],]*}"; gitsigns="''${gitsigns}" ;;
esac
case "$header" in
*behind*) behind="''${header#*behind }"; behind="''${behind%%[],]*}"; gitsigns="''${gitsigns}" ;;
esac
case "$status" in
*$'\n'" "[MAR]*) gitsigns="''${gitsigns}!" ;;
esac
case "$status" in
*$'\n'"??"*) gitsigns="''${gitsigns}?" ;;
esac
case "$status" in
*$'\n'" "[D]*) gitsigns="''${gitsigns}" ;;
esac
case "$status" in
*$'\n'[MADR]*) gitsigns="''${gitsigns}+" ;;
esac
local diff="$(git diff --shortstat 2>/dev/null)"
local diff="$(git diff --shortstat 2>/dev/null)"
local changed="" add="" del=""
if [ -n "$diff" ]; then
changed="''${diff%% file*}"; changed="''${changed##* }"
case "$diff" in
*insertion*) add="''${diff#*, }"; add="''${add%% *}" ;;
esac
case "$diff" in
*deletion*) del="''${diff% deletion*}"; del="''${del##* }" ;;
esac
fi
if [ -n "$gitsigns" ] || [ -n "$branch" ]; then
[ -n "$gitsigns" ] && gitsigns="\e[1;31m[$gitsigns]"
[ -n "$changed" ] && [ "$changed" -gt 0 ] && changed="\e[1;34m~$changed \e[0m"
[ -n "$add" ] && [ "$add" -gt 0 ] && add="\e[1;32m+$add \e[0m"
[ -n "$del" ] && [ "$del" -gt 0 ] && del="\e[1;31m-$del\e[0m"
echo -n "\e[1;34m \e[1;35m $branch$gitsigns\e[0m $changed$add$del\n"
fi
'';
prompt_jobs_line = /* bash */ ''
local job_count="$(echo -p '\j')"
if [ "$job_count" -gt 0 ]; then
echo -n "\e[1;34m \e[1;33m󰒓 $job_count job(s) running\e[0m\n"
fi
'';
prompt_ssh_line = /* bash */ ''
local ssh_server="$(echo $SSH_CONNECTION | cut -f3 -d' ')"
[ -n "$ssh_server" ] && echo -n "\e[1;34m \e[1;39m🌐 $ssh_server\e[0m\n"
'';
prompt_pwd_line = /* bash */ ''
echo -p "\e[1;34m \e[1;36m\W\e[1;32m/"
'';
prompt_dollar_line = /* bash */ ''
local dollar="$(echo -p "\$ ")"
local dollar="$(echo -e "\e[1;32m$dollar\e[0m")"
echo -n "\e[1;34m $dollar "
'';
prompt = /* bash */ ''
local statline="$(prompt_stat_line)"
local topline="$(prompt_topline)"
local jobsline="$(prompt_jobs_line)"
local sshline="$(prompt_ssh_line)"
local pwdline="$(prompt_pwd_line)"
local dollarline="$(prompt_dollar_line)"
local prompt="$topline$statline$PROMPT_GIT_LINE$jobsline$sshline$pwdline\n$dollarline"
echo -en "$prompt"
'';
shed_ver = ''
shed --version
'';
encrypt = /* bash */ ''
if [ -z "$1" ]; then
echo "Usage: encrypt <text> [recipient]"
return 1
fi
if [ -z "$2" ]; then
gpg --encrypt --armor -r "$1"
else
echo "$1" | gpg --encrypt --armor -r "$2"
fi
'';
decrypt = /* bash */ ''
if [ -z "$1" ]; then
gpg --decrypt --quiet 2>/dev/null
else
echo "$1" | gpg --decrypt --quiet
fi
'';
viflake = /* bash */ ''
filename="$(upfind flake.nix)"
if [ -n "$filename" ]; then
nvim "$filename"
else
echo "No flake.nix found in this directory or any parent directories."
return 1
fi
'';
upfind = /* bash */ ''
until [ "$#" -eq 0 ]; do
filename="$1"
(
until [ -f "./$filename" ]; do
builtin cd ..
if [ "$PWD" = "/" ]; then
echo "upsearch: failed to find file '$filename' in this directory or any parent directories." 1>&2
break
fi
done
if [ -f "./$filename" ]; then
realpath "./$filename"
fi
)
shift 1
done
'';
nvim = /* bash */ ''
${shellsound} ${sndpath}/nvim.wav
command nvim "$@"
'';
neovide = /* bash */ ''
${shellsound} ${sndpath}/nvim.wav
command neovide "$@"
'';
grimblast = /* bash */ ''
if command grimblast "$@"; then
${shellsound} ${sndpath}/screenshot.wav
fi
'';
gitcheckout_sfx = /* bash */ ''
if git checkout "$@"; then
${shellsound} ${sndpath}/gitcheckout.wav
else
${shellsound} ${sndpath}/error.wav
fi
'';
gitrebase_sfx = /* bash */ ''
if git rebase "$@"; then
${shellsound} ${sndpath}/gitrebase.wav
else
${shellsound} ${sndpath}/error.wav
fi
'';
gitcommit_sfx = /* bash */ ''
local output="$(git commit "$@")"
if [ "$?" -eq "0" ]; then
${shellsound} ${sndpath}/gitcommit.wav
echo "$output" | ${color-commit}
return 0
else
${shellsound} ${sndpath}/error.wav
echo "$output"
return 1
fi
'';
gitpush_sfx = /* bash */ ''
if git push "$@"; then
${shellsound} ${sndpath}/gitpush.wav
else
${shellsound} ${sndpath}/error.wav
fi
'';
gitpull_sfx = /* bash */ ''
if git pull "$@"; then
${shellsound} ${sndpath}/gitpull.wav
else
${shellsound} ${sndpath}/error.wav
fi
'';
ls = /* bash */ ''
eza -1 --group-directories-first --icons "$@"
'';
mkcd = /* bash */ ''
command mkdir -p "$1" && builtin cd "$1"
'';
cd = /* bash */ ''
eza -1 --group-directories-first --icons "$@" 2> /dev/null
builtin cd "$@"
'';
hyprsock = /* bash */ ''
socat -U - UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock
'';
vipe = /* bash */ ''
local tmp=$(mktemp)
$EDITOR "$tmp" -R - >/dev/tty </dev/tty
cat "$tmp"
rm "$tmp"
'';
};
};
}

View File

@@ -0,0 +1,198 @@
{ ... }:
{
programs.shed = {
functions = {
_read_obj = /* bash */ ''
_obj=""
while read_key -v key; do
if [[ "''${#_obj}" -ge 3 ]]; then return 1; fi
case "$key" in
i|a)
if [ -n "$_obj" ]; then return 1; fi
_obj="$key"
;;
b|e)
if [ -n "$_obj" ]; then return 1; fi
_obj="$key"
break
;;
w|W)
_obj="$_obj$key"
break
;;
f|F)
read_key -v char
_obj="$key$char"
break
;;
\(|\)|\[|\]|\{|\}|\"|\')
if [ -z "$_obj" ]; then return 1; fi
_obj="$_obj$key"
break
;;
esac
done
'';
_surround_1 = /* bash */ ''
local _obj
_read_obj
_get_surround_target
_KEYS="v$_obj"
'';
_surround_2 = /* bash */ ''
local start
local end
if [ "$_ANCHOR" -lt "$_CURSOR" ]; then
start=$_ANCHOR
end=$_CURSOR
else
start=$_CURSOR
end=$_ANCHOR
fi
end=$((end + 1))
delta=$((end - start))
left="''${_BUFFER:0:$start}"
mid="''${_BUFFER:$start:$delta}"
right="''${_BUFFER:$end}"
_BUFFER="$left$_sl$mid$_sr$right"
_CURSOR=$start
'';
_get_surround_target = /* bash */ ''
read_key -v _s_ch
case "$_s_ch" in
\(|\)) _sl='('; _sr=')' ;;
\[|\]) _sl='['; _sr=']' ;;
\{|\}) _sl='{'; _sr='}' ;;
\<|\>) _sl='<'; _sr='>' ;;
*) _sl="$_s_ch"; _sr="$_s_ch" ;;
esac
'';
_surround_del = /* bash */ ''
_get_surround_target
local left_buf="''${_BUFFER:0:$_CURSOR}"
local right_buf="''${_BUFFER:$left}"
local left=""
local right=""
_scan_left $_sl "$left_buf"
if [ "$?" -ne 0 ]; then
_scan_right $_sl "$right_buf"
[ "$?" -ne 0 ] && echo "No match found in left or right scan for char '$_sl' on $left_buf" 1>&2 && return 1
left=$right
fi
mid_start=$((left + 1))
right=""
left_buf="''${_BUFFER:0:$left}"
right_buf="''${_BUFFER:$mid_start}"
_scan_right $_sr "$right_buf"
[ "$?" -ne 0 ] && echo "No match found in right scan for char '$_sr'" 1>&2 && return 1
mid_end=$((mid_start + right))
right_start=$((mid_end + 1))
new_left_buf="''${_BUFFER:0:$left}"
new_mid_buf="''${_BUFFER:$mid_start:$right}"
new_right_buf="''${_BUFFER:$right_start}"
_BUFFER="$new_left_buf$new_mid_buf$new_right_buf"
'';
_scan_left = /* bash */ ''
local needle="$1"
local haystack="$2"
local i=$((''${#haystack} - 1))
while [ "$i" -ge 0 ]; do
ch="''${haystack:$i:1}"
if [ "$ch" = "$needle" ]; then
left=$i
return 0
fi
i=$((i - 1))
done
return 1
'';
_scan_right = /* bash */ ''
local needle="$1"
local haystack="$2"
local i=0
while [ "$i" -lt "''${#haystack}" ]; do
ch="''${haystack:$i:1}"
if [ "$ch" = "$needle" ]; then
right="$i"
return 0
fi
i=$((i + 1))
done
return 1
'';
_enum_chars = /* bash */ ''
local i=0
[ -z "$1" ] && return 1
[ "''${#1}" -eq 1 ] && echo "0 $1" && return 0
while [ "$i" -lt ''${#1} ]; do
echo -n "$i ''${1:$i:1} "
i=$((i + 1))
[ $i -ge "''${#1}" ] && break
echo -n " "
done
echo
'';
_enum_chars_rev = /* bash */ ''
local i=$((''${#1} - 1))
[ -z "$1" ] && return 1
[ "''${#1}" -eq 1 ] && echo "0 $1" && return 0
while [ "$i" -ge 0 ]; do
echo -n "$i ''${1:$i:1} "
i=$((i - 1))
[ $i -lt 0 ] && break
echo -n " "
done
echo
'';
_edit_line = /* bash */ ''
tmp="$(mktemp)"
echo -n "$_BUFFER" > "$tmp"
$EDITOR "$tmp"
_BUFFER="$(cat "$tmp")"
rm "$tmp"
'';
};
keymaps = [
{
modes = [ "n" ];
keys = "<leader>e";
command = ":!_edit_line<CR>";
}
{
modes = [ "n" ];
keys = "ys";
command = ":!_surround_1<CR>:!_surround_2<CR>";
}
{
modes = [ "n" ];
keys = "ds";
command = ":!_surround_del<CR>";
}
];
};
}

View File

@@ -1,12 +1,13 @@
{ lib, config, ... }: { lib, config, ... }:
{ {
programs.fern = { programs.shed = {
enable = true; enable = true;
settings = { settings = {
autocd = true; autocd = true;
autoHistory = true; autoHistory = true;
maxHistoryEntries = -1;
}; };
}; };
} }

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,22 +1,26 @@
{ lib, self, config, host, pkgs, ... }: {
lib,
self,
config,
host,
pkgs,
...
}:
let let
scheme = "ayu-dark"; 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;
opacity.terminal = 1.0;
targets = { targets = {
waybar.enable = false; waybar.enable = false;
spicetify.enable = false; spicetify.enable = false;

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://${config.home.homeDirectory}/.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,14 +32,22 @@ 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 =
with pkgs;
[
cargo
rustc
clippy
rust-analyzer
nerd-fonts.envy-code-r
clippy
rust-analyzer
nemo nemo
feh feh
gtk3 gtk3
@@ -45,7 +60,7 @@ in {
zsh-syntax-highlighting zsh-syntax-highlighting
zsh-history-substring-search zsh-history-substring-search
zsh-autosuggestions zsh-autosuggestions
libreoffice #libreoffice
gtrash gtrash
ripgrep ripgrep
wf-recorder wf-recorder
@@ -61,11 +76,11 @@ in {
gparted gparted
dust dust
porsmo porsmo
rustup
w3m w3m
sox
neovide neovide
claude-code claude-code
pythonWithStuff myPython
monero-cli monero-cli
protonup-qt protonup-qt
piper piper
@@ -86,6 +101,7 @@ in {
nodejs_latest nodejs_latest
myPkgs.noto-sans-jp myPkgs.noto-sans-jp
myPkgs.billy-font myPkgs.billy-font
] ++ scripts; ]
++ scripts;
}; };
} }

View File

@@ -1,38 +1,23 @@
{ pkgs, self, ... }: { pkgs, self, ... }:
let
keyboardSfxScript = "${self}/assets/scripts/keyboard_sound_thing.py";
in
{ {
systemd.user = { systemd.user = {
timers = {
maintenanceCheck = {
Unit = { Description = "Timer for package maintenance check"; };
Timer = {
OnCalendar = "hourly";
Persistent = true;
};
Install = { WantedBy = [ "timers.target" ]; };
};
};
services = { services = {
loginSound = { swww-daemon = {
Unit= { Unit.Description = "Daemon for swww (sway wayland wallpaper manager)";
Description = "Plays a sound on login"; Install.WantedBy = [ "hyprland-session.target" ];
After = [ "graphical-session.target" ];
WantedBy = [ "graphical-session.target" ];
};
Service = { Service = {
ExecStart = "${pkgs.alsa-utils}/bin/aplay -qN ${self}/assets/sound/login.wav"; ExecStart = "${pkgs.swww}/bin/swww-daemon";
Type = "simple";
}; };
}; };
maintenanceCheck = { kitty-keyboard-sounds = {
Unit = { Unit.Description = "Keyboard sound effects for kitty";
Description = "Check for updates in my maintained packages"; Install.WantedBy = [ "hyprland-session.target" ];
};
Service = { Service = {
ExecStart = "${pkgs.nix}/bin/nix-shell -p python3Packages.requests --run '${pkgs.python311}/bin/python ${pkgs.myScripts.check_updates}/bin/checkupdates.py'"; ExecStart = "${pkgs.myPython}/bin/python3 ${keyboardSfxScript}";
Type = "simple";
}; };
}; };
}; };

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";
}; };
"image#nixicon" = {
path = "${self}/assets/images/nix-snowflake-colours.svg";
size = 28;
};
memory = { memory = {
interval = 20; interval = 20;
format = "MEM: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{percentage}%</span>"; 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"; 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 = { cpu = {
interval = 1; interval = 1;
format = "CPU: [ <span color='#272D38'>{icon}</span> ] <span size='8pt'>{usage}%</span>"; format = "󰍛 <span color='#aaaaaa'>{usage}%</span>";
tooltip = true; tooltip = true;
format-icons = bar-gauge-critical;
}; };
}; };
}; };
style = '' style = ''
@define-color accent #CF1B30;
@define-color bg-dark #1a1a1a;
@define-color bg-island #2a2a2a;
@define-color fg-dim #aaaaaa;
@define-color fg-text #d0d0d0;
* { * {
font-size: 16px; font-size: 20px;
border: none; border: none;
font-family: EnvyCodeR Nerd Font Mono; font-family: EnvyCodeR Nerd Font Mono;
font-weight: Bold; font-weight: bold;
min-height: 0; min-height: 0;
border-radius: 0px; border-radius: 0;
padding: 2px;
} }
window#waybar { window#waybar {
color: #${fg.lightest}; background: rgba(0, 0, 0, 0.05);
background: #${bg.darkester}; color: @fg-text;
} }
tooltip { tooltip {
background: #${bg.darkester}; background: @bg-dark;
border: 2px solid @accent;
border-radius: 8px;
}
/* Tray island (far left) */
#tray {
background-color: @bg-dark;
color: @accent;
border: 2px solid @accent;
border-radius: 8px;
padding: 4px 8px;
margin: 6px 4px 6px 10px;
}
/* Workspaces island */
#workspaces {
background-color: @bg-dark;
border: 2px solid @accent;
border-radius: 8px;
margin: 6px 4px;
padding: 0 4px;
} }
#workspaces button { #workspaces button {
color: #${fg.lightest}; color: @fg-dim;
background: #${bg.darkester}; background: transparent;
padding: 4px 8px;
border-radius: 6px;
margin: 2px;
} }
#workspaces button.active { #workspaces button.active {
color: #${bg.darker}; color: @bg-dark;
background: #${bg.darkester}; background-color: @accent;
}
#workspaces button.focused {
color: #${bg.dark};
background: #${bg.darkester};
}
#workspaces button.urgent {
color: #${fg.lightest};
background: #${bg.darkester};
} }
#workspaces button:hover { #workspaces button:hover {
color: #${fg.lightest}; color: @bg-dark;
background: #${bg.darkester}; background-color: alpha(@accent, 0.5);
} }
#window, /* Right info modules island */
#clock, #cpu,
#memory,
#pulseaudio, #pulseaudio,
#network, #network,
#workspaces, #window,
#tray,
#cpu {
padding: 0px 10px;
margin: 0px;
}
#tray {
margin-right: 10px;
}
#workspaces {
color: #${fg.lightest};
}
#window {
color: #${fg.lightest};
}
#clock { #clock {
color: #${fg.lightest}; background-color: @bg-dark;
color: @accent;
border-top: 2px solid @accent;
border-bottom: 2px solid @accent;
padding: 4px 10px;
margin: 6px 0;
} }
#network { /* Window title island (center) */
color: #${fg.lightest}; #window {
border-radius: 8px;
border-left: 2px solid @accent;
border-right: 2px solid @accent;
margin: 6px 4px;
} }
#pulseaudio { /* 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;
} }
/* round right edge of last module before nixicon */
#clock {
border-radius: 0 8px 8px 0;
border-right: 2px solid @accent;
margin-right: 4px;
}
/* NixOS icon island (far right, outlined) */
#image {
background-color: @bg-dark;
color: @accent;
border: 2px solid @accent;
border-radius: 8px;
padding: 4px 10px;
margin: 6px 10px 6px 4px;
}
@import url("file://${config.home.homeDirectory}/.local/state/sysflake/waybar-colors.css");
''; '';
}; };
}; };

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,17 +1,26 @@
{ 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 =
base16_scheme:
let
scheme_path = "${pkgs.base16-schemes}/share/themes/${base16_scheme}.yaml"; scheme_path = "${pkgs.base16-schemes}/share/themes/${base16_scheme}.yaml";
scheme_string = builtins.readFile scheme_path; scheme_string = builtins.readFile scheme_path;
scheme_list = lib.splitString "\n" scheme_string; # Split into a list scheme_list = lib.splitString "\n" scheme_string; # Split into a list
colors = colors =
lib.filter (line: builtins.match "^ *base[0-9A-F]{2}: .*" line != null) # Get raw hex values from scheme list lib.filter (line: builtins.match "^ *base[0-9A-F]{2}: .*" line != null) # Get raw hex values from scheme list
scheme_list; scheme_list;
parsed_scheme = lib.lists.foldl' (acc: line: # Initialize attribute set and begin folding values into it parsed_scheme = lib.lists.foldl' (
acc: line: # Initialize attribute set and begin folding values into it
let let
splitLine = lib.splitString ": " line; # Split into keys (base00, base01, etc.) and values splitLine = lib.splitString ": " line; # Split into keys (base00, base01, etc.) and values
key = builtins.elemAt splitLine 0; key = builtins.elemAt splitLine 0;
@@ -19,26 +28,28 @@ let
trimmedKey = lib.trim key; # Start cleaning values trimmedKey = lib.trim key; # Start cleaning values
cleanValue_step1 = lib.splitString " " value; cleanValue_step1 = lib.splitString " " value;
cleanValue_step2 = builtins.elemAt cleanValue_step1 0; # Get just the hex value, ignore comments etc. cleanValue_step2 = builtins.elemAt cleanValue_step1 0; # Get just the hex value, ignore comments etc.
cleanValue_final = cleanValue_final = builtins.substring 1 (
builtins.substring 1 (builtins.stringLength cleanValue_step2 - 2) builtins.stringLength cleanValue_step2 - 2
cleanValue_step2; ) cleanValue_step2;
in acc // { "${trimmedKey}" = cleanValue_final; }) { } colors; # Accumulate keys/values into attribute set in
in parsed_scheme; # Return parsed color scheme 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 = {
".config/neofetch/config.conf".text = '' ".config/fastfetch/config.conf".text = ''
username=$(whoami) username=$(whoami)
name_length=''${#username} name_length=''${#username}
total_width=40 total_width=40

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 = {
@@ -14,6 +20,11 @@
alias = { alias = {
draft = "!if git rev-parse > /dev/null 2>&1; then echo \"$1\" >> $(git rev-parse --git-dir)/DRAFT_MSG; else exit 1; fi #"; draft = "!if git rev-parse > /dev/null 2>&1; then echo \"$1\" >> $(git rev-parse --git-dir)/DRAFT_MSG; else exit 1; fi #";
}; };
safe = {
directory = [
"${config.home.homeDirectory}/mnt/net"
];
};
core.pager = "delta"; core.pager = "delta";
interactive.diffFilter = "delta --color-only"; interactive.diffFilter = "delta --color-only";
delta.navigate = "true"; delta.navigate = "true";

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,6 +20,7 @@
settings = { settings = {
confirm_os_window_close = 0; confirm_os_window_close = 0;
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;
@@ -30,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";
@@ -21,6 +20,31 @@
pattern = [ "*" ]; pattern = [ "*" ];
desc = "Start the floaterm window"; desc = "Start the floaterm window";
} }
{
pattern = [ "qf" ];
event = [ "FileType" ];
callback = {
__raw = /* lua */ ''
function()
vim.keymap.set("n", "<CR>", "<CR>", { buffer = true })
end'';
};
}
{
pattern = [ "nix" ];
event = [ "FileType" ];
callback = {
__raw = /* lua */ ''
function()
require("otter").activate(
{ "bash", "lua", "python" },
true, -- completions
true, -- diagnostics
nil
)
end'';
};
}
]; ];
}; };
} }

View File

@@ -1,14 +1,19 @@
{ env, config, pkgs, host, self, ... }: { {
env,
config,
pkgs,
host,
self,
...
}:
{
programs.nixvim = { programs.nixvim = {
nixpkgs.useGlobalPackages = true; nixpkgs.useGlobalPackages = true;
extraPackages = [
pkgs.cargo
pkgs.rustc
pkgs.clippy
pkgs.rustup
pkgs.rust-analyzer
pkgs.nerd-fonts.envy-code-r
];
}; };
imports = [ ./plugins ./options.nix ./keymaps.nix ./autocmd.nix ]; imports = [
./plugins
./options.nix
./keymaps.nix
./autocmd.nix
];
} }

View File

@@ -36,6 +36,11 @@
key = "<S-Tab>"; key = "<S-Tab>";
mode = "n"; mode = "n";
} }
{
action = "zA";
key = "<CR>";
mode = "n";
}
{ {
action = "<C-w>w"; action = "<C-w>w";
key = "<Tab>"; key = "<Tab>";
@@ -44,12 +49,145 @@
{ {
action = "<cmd>FloatermToggle def_term<CR>"; action = "<cmd>FloatermToggle def_term<CR>";
key = "<F2>"; key = "<F2>";
mode = [ "n" "t" ]; mode = [
"n"
"t"
];
} }
{ {
action = "<cmd>COQnow<CR>"; action = "<cmd>lua require('treesj').toggle()<CR>";
key = "!cq"; key = "<space>j";
mode = "n"; mode = [ "n" ];
}
{
action = "<C-\\><C-n>";
key = "<C-e>";
mode = [ "t" ];
}
{
action = ''"+y'';
key = "<space>y";
mode = [
"n"
"x"
];
}
{
action = ''"+p'';
key = "<space>p";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ "function() require('opencode').prompt('test', {submit=true}) end";
key = "<space>at";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ "function() require('opencode').select() end";
key = "<space>as";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ "function() require('opencode').prompt('document', {submit=true}) end";
key = "<space>ad";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ "function() require('opencode').prompt('review', {submit=true}) end";
key = "<space>ar";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ "function() require('opencode').prompt('fix', {submit=true}) end";
key = "<space>af";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() require('opencode').ask("@this ", {submit=true}) end'';
key = "<space>aa";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() require('opencode').explain("@this ") end'';
key = "<space>ae";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() require('opencode').command("session.half.page.up") end'';
key = "<C-S-u>";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() require('opencode').command("session.half.page.down") end'';
key = "<C-S-d>";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() require('opencode').command("prompt.clear") end'';
key = "<C-c>";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() require('opencode').operator("@this ") end'';
key = "go";
mode = [
"n"
"x"
];
}
{
action.__raw = /* lua */ ''function() return require('opencode').operator("@this ") .. "_" end'';
key = "goo";
mode = [ "n" ];
}
{
action = "<cmd>lua require('opencode').toggle()<CR>";
key = "<C-.>";
mode = [
"n"
"t"
];
}
{
action = "<cmd>lua require('opencode').select()<CR>";
key = "<C-n>";
mode = [
"n"
"x"
];
} }
]; ];
}; };

View File

@@ -1,11 +1,13 @@
{ 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;
colorscheme = "chalk"; colorscheme = "seti";
#colorscheme = { #colorscheme = {
# base00 = "#${scheme.base00}"; # base00 = "#${scheme.base00}";
# base01 = "#${scheme.base01}"; # base01 = "#${scheme.base01}";
@@ -30,7 +32,12 @@ in {
virtual_text = true; virtual_text = true;
signs = false; signs = false;
}; };
extraConfigLua = '' 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
@@ -43,7 +50,7 @@ in {
vim.filetype.add({ vim.filetype.add({
filename = { filename = {
[".fernrc"] = "sh", [".shedrc"] = "sh",
} }
}) })
@@ -57,6 +64,7 @@ in {
vim.opt.termguicolors = true vim.opt.termguicolors = true
vim.opt.ruler = true vim.opt.ruler = true
vim.opt.scrolloff = 6 vim.opt.scrolloff = 6
vim.opt.foldlevelstart = 99
vim.opt.undofile = true vim.opt.undofile = true
vim.opt.foldmethod = "manual" vim.opt.foldmethod = "manual"
vim.opt.wrap = true vim.opt.wrap = true
@@ -65,8 +73,17 @@ in {
vim.opt.breakat = " \t!@*-+;:,./?" vim.opt.breakat = " \t!@*-+;:,./?"
vim.opt.guifont = "EnvyCodeR Nerd Font Mono:h18" vim.opt.guifont = "EnvyCodeR Nerd Font Mono:h18"
vim.g.mapleader = "!" vim.g.mapleader = " "
vim.g.rust_recommended_style = 0 vim.g.rust_recommended_style = 0
vim.treesitter.query.set("nix", "injections", [[
;; extends
((comment) @injection.language
.
(indented_string_expression
(string_fragment) @injection.content)
(#gsub! @injection.language "^%s*/%*%s*(%S+)%s*%*/.*$" "%1"))
]])
''; '';
}; };
} }

0
modules/home/programs/nixvim/plugins/alpha.nix Executable file → Normal file
View File

4
modules/home/programs/nixvim/plugins/barbar.nix Executable file → Normal file
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

@@ -0,0 +1,12 @@
{
programs.nixvim = {
plugins.bufferline = {
enable = true;
settings = {
options = {
separator_style = "slant";
};
};
};
};
}

0
modules/home/programs/nixvim/plugins/cmp.nix Executable file → Normal file
View File

View File

@@ -1,5 +1,7 @@
{ {
programs.nixvim.plugins.copilot-lua = { programs.nixvim = {
plugins = {
copilot-lua = {
enable = true; enable = true;
settings = { settings = {
suggestion = { suggestion = {
@@ -7,4 +9,10 @@
}; };
}; };
}; };
opencode = {
enable = true;
};
};
};
} }

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