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
![desktop-neofetch](./assets/screens/desktop-neofetch.png)
![desktop-fastfetch](./assets/screens/desktop-neofetch.png)
![busy-desktop](./assets/screens/desktop-busy.png)
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*:
- `vipkg <part of package name>`
- **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`
---

318
flake.lock generated
View File

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

View File

@@ -2,13 +2,15 @@
description = "pagedMov's NixOS and Home Manager configuration";
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";
copyparty.url = "github:9001/copyparty";
hyprpicker.url = "github:hyprwm/hyprpicker";
stylix.url = "github:danth/stylix";
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";
@@ -29,7 +31,8 @@
};
};
outputs = { ... }@inputs:
outputs =
{ ... }@inputs:
let
movLib = import ./lib {
inherit inputs;
@@ -47,32 +50,26 @@
hostDir = "laptop";
kind = "both";
}
{
host = "xenon";
hostDir = "server";
kind = "both";
extraNixosModules = [
./modules/server
];
}
{
host = "phosphorous";
hostDir = "work";
kind = "both";
extraNixosModules = [
inputs.fern.nixosModules.fern
inputs.shed.nixosModules.shed
inputs.copyparty.nixosModules.default
inputs.agenix.nixosModules.default
];
extraHomeModules = [
inputs.fern.homeModules.fern
inputs.shed.homeModules.shed
];
extraOverlays = [
inputs.fern.overlays.default
inputs.shed.overlays.default
inputs.copyparty.overlays.default
];
}
];
in {
in
{
inherit (hosts) nixosConfigurations homeConfigurations;
};
}

View File

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

View File

@@ -1,28 +1,44 @@
# 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, ... }:
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports =
[ (modulesPath + "/profiles/qemu-guest.nix")
];
imports = [
(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.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/5d8dd8ba-6c4c-4227-adc5-f33bf0022fff";
fsType = "ext4";
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/5d8dd8ba-6c4c-4227-adc5-f33bf0022fff";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/6A3C-0A12";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/6A3C-0A12";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
swapDevices = [ ];

View File

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

View File

@@ -1,10 +1,21 @@
{ username, pkgs, config, ... }: {
{
username,
pkgs,
config,
...
}:
{
imports = [ ./hardware.nix ];
boot = {
kernelModules = [ "acpi_call" ];
extraModulePackages = with config.boot.kernelPackages;
[ acpi_call cpupower ] ++ [ pkgs.cpupower-gui ];
extraModulePackages =
with config.boot.kernelPackages;
[
acpi_call
cpupower
]
++ [ pkgs.cpupower-gui ];
};
movOpts = {
@@ -27,9 +38,19 @@
};
environment = {
variables = { PATH = "${pkgs.clang-tools}/bin:$PATH"; };
shells = with pkgs; [ zsh bash ];
systemPackages = with pkgs; [ acpi brightnessctl cpupower-gui powertop ];
variables = {
PATH = "${pkgs.clang-tools}/bin:$PATH";
};
shells = with pkgs; [
zsh
bash
];
systemPackages = with pkgs; [
acpi
brightnessctl
cpupower-gui
powertop
];
};
users = {
@@ -40,7 +61,11 @@
isNormalUser = true;
initialPassword = "1234";
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
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
{
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.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
@@ -23,7 +36,10 @@
fileSystems."/boot" = {
device = "/dev/sda2";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
options = [
"fmask=0077"
"dmask=0077"
];
};
fileSystems."/home" = {
@@ -42,6 +58,5 @@
# networking.interfaces.wlp15s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.cpu.amd.updateMicrocode = 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.homeDirectory =
"/home/${username}"; # Replace with your actual home directory
home.stateVersion =
"24.05"; # Adjust this based on your system's NixOS version
home.homeDirectory = "/home/${username}"; # Replace with your actual home directory
home.stateVersion = "24.05"; # Adjust this based on your system's NixOS version
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
fern = inputs.fern.packages.${pkgs.stdenv.hostPlatform.system}.default;
shed = inputs.shed.packages.${pkgs.stdenv.hostPlatform.system}.default;
in
{
imports = [
@@ -33,11 +38,21 @@ in
};
environment = {
variables = { PATH = "${pkgs.clang-tools}/bin:$PATH"; };
shells = [ pkgs.myPkgs.slash pkgs.zsh pkgs.bash ];
variables = {
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 = {
groups.persist = { };
@@ -47,8 +62,14 @@ in
${username} = {
isNormalUser = true;
initialPassword = "1234";
shell = pkgs.fern;
extraGroups = [ "davfs2" "input" "wheel" "persist" "libvirtd" ];
shell = pkgs.shed;
extraGroups = [
"davfs2"
"input"
"wheel"
"persist"
"libvirtd"
];
};
};
};

View File

@@ -1,4 +1,9 @@
{ slash, pkgs, username, ... }:
{
slash,
pkgs,
username,
...
}:
let
kickstartServer =
@@ -17,30 +22,31 @@ let
'';
};
startTf2Server = pkgs.writeShellScript "start-srv.sh" ''
set -euo pipefail
export HOME=/home/tf2
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
mkdir -p "$HOME/tf2server"
mkdir -p "$HOME/tf2server"
set -euo pipefail
export HOME=/home/tf2
export LD_LIBRARY_PATH=/usr/lib:/usr/lib32
mkdir -p "$HOME/tf2server"
mkdir -p "$HOME/tf2server"
steamcmd +force_install_dir "$HOME/tf2server" \
+login anonymous \
+app_update 232250 validate \
+quit
steamcmd +force_install_dir "$HOME/tf2server" \
+login anonymous \
+app_update 232250 validate \
+quit
cd "$HOME/tf2server"
cd "$HOME/tf2server"
ln -sf "$HOME/.steam/steam/linux64" "$HOME/.steam/sdk64"
ln -sf "$HOME/.steam/steam/linux32" "$HOME/.steam/sdk32"
ln -sf "$HOME/.steam/steam/linux64" "$HOME/.steam/sdk64"
ln -sf "$HOME/.steam/steam/linux32" "$HOME/.steam/sdk32"
exec ./srcds_run -game tf -console -port 25565 +map cp_dustbowl \
+ip 10.233.1.2 -norestart \
+sv_setsteamaccount 8862FD4B30F401036B8AAC6A7FE6B123
exec ./srcds_run -game tf -console -port 25565 +map cp_dustbowl \
+ip 10.233.1.2 -norestart \
+sv_setsteamaccount 8862FD4B30F401036B8AAC6A7FE6B123
'';
in
pkgs.buildFHSEnv {
name = "srcds-env";
targetPkgs = pkgs: with pkgs; [
pkgs.buildFHSEnv {
name = "srcds-env";
targetPkgs =
pkgs: with pkgs; [
steamcmd
glibc
zlib
@@ -50,29 +56,30 @@ let
libnl
libsrcds
# Optional: link compat
stdenv.cc.cc.lib
];
multiPkgs = pkgs: with pkgs.pkgsi686Linux; [
glibc
zlib
ncurses5
libuuid
alsa-lib
libxcrypt-legacy
gcc
];
multiArch = true;
runScript = "${startTf2Server}";
# Optional: link compat
stdenv.cc.cc.lib
];
multiPkgs =
pkgs: with pkgs.pkgsi686Linux; [
glibc
zlib
ncurses5
libuuid
alsa-lib
libxcrypt-legacy
gcc
];
multiArch = true;
runScript = "${startTf2Server}";
};
};
in
{
networking = {
nat = {
enable = true;
internalInterfaces = ["ve-+"];
externalInterface = "enp8s0";
internalInterfaces = [ "ve-+" ];
externalInterface = "enp8s0";
};
};
containers.tf2server = {
@@ -84,7 +91,6 @@ in
imports = [ ];
nixpkgs.config.allowUnfree = true;
services.openssh.enable = true;
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
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
};

View File

@@ -1,41 +1,68 @@
# 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, ... }:
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
imports = [
(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.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/9a98748d-1953-4316-9788-07d11c5d0af6";
fsType = "btrfs";
options = [ "subvol=root" "compress=zstd:3" "noatime" ];
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/9a98748d-1953-4316-9788-07d11c5d0af6";
fsType = "btrfs";
options = [
"subvol=root"
"compress=zstd:3"
"noatime"
];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/5BA1-A9F8";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/5BA1-A9F8";
fsType = "vfat";
options = [
"fmask=0022"
"dmask=0022"
];
};
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/00fd7a7c-d916-4a61-abc1-8dde26b4413b";
fsType = "btrfs";
options = [ "compress=zstd:3" "noatime" ];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/00fd7a7c-d916-4a61-abc1-8dde26b4413b";
fsType = "btrfs";
options = [
"compress=zstd:3"
"noatime"
];
};
fileSystems."/nix" =
{ device = "/dev/disk/by-uuid/7c03499c-e2a7-4352-8797-a21f094ef90b";
fsType = "btrfs";
options = [ "compress=zstd:3" "noatime" ];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/7c03499c-e2a7-4352-8797-a21f094ef90b";
fsType = "btrfs";
options = [
"compress=zstd:3"
"noatime"
];
};
swapDevices = [ ];

View File

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

View File

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

View File

@@ -1,15 +1,17 @@
{
inputs,
username,
nixpkgsConfig ? { allowUnfree = true; },
nixpkgsConfig ? {
allowUnfree = true;
},
host,
hostDir,
system ? "x86_64-linux",
kind,
extraNixosModules ? [],
extraHomeModules ? [],
extraOverlays ? [],
overlay ? true
extraNixosModules ? [ ],
extraHomeModules ? [ ],
extraOverlays ? [ ],
overlay ? true,
}:
let
@@ -17,19 +19,31 @@ let
../hosts/${hostDir}/config.nix
../modules/sys
inputs.stylix.nixosModules.stylix
] ++ extraNixosModules;
]
++ extraNixosModules;
homeModules = [
../hosts/${hostDir}/home.nix
../modules/home
inputs.stylix.homeModules.stylix
inputs.nixvim.homeModules.nixvim
] ++ extraHomeModules;
]
++ extraHomeModules;
pkgs = import inputs.nixpkgs {
inherit system;
config = nixpkgsConfig;
overlays = extraOverlays ++ (if overlay then [
(import ../overlay/overlay.nix { inherit host; root = inputs.self; })
] else []);
overlays =
extraOverlays
++ (
if overlay then
[
(import ../overlay/overlay.nix {
inherit host;
root = inputs.self;
})
]
else
[ ]
);
};
specialArgs = {
inherit inputs username host;
@@ -55,7 +69,8 @@ let
else
null;
in
{
nixosConfigurations = if kind == "nixos" || kind == "both" then { ${host} = nixosCfg; } else {};
homeConfigurations = if kind == "home" || kind == "both" then { ${host + "Home"} = homeCfg; } else {};
}
{
nixosConfigurations = if kind == "nixos" || kind == "both" then { ${host} = nixosCfg; } 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 = [
./gtk.nix
./spicetify.nix
@@ -6,10 +16,11 @@
./userservices.nix
./starship.nix
./userpkgs.nix
./zsh
./fern
./swaync.nix
./hyprland.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,16 +1,20 @@
{ lib, config, pkgs, ... }: {
{
lib,
config,
pkgs,
...
}:
{
options = {
movOpts.envConfig.gtkConfig.enable =
lib.mkEnableOption "enable my gtk options";
movOpts.envConfig.gtkConfig.enable = lib.mkEnableOption "enable my gtk options";
};
config = lib.mkIf config.movOpts.envConfig.gtkConfig.enable {
fonts.fontconfig.enable = true;
home.packages = with pkgs;
[
nerd-fonts.jetbrains-mono
nerd-fonts.symbols-only
cascadia-code
];
home.packages = with pkgs; [
nerd-fonts.jetbrains-mono
nerd-fonts.symbols-only
cascadia-code
];
gtk = {
enable = true;

View File

@@ -1,29 +1,46 @@
{ inputs, pkgs, lib, config, self, host, ... }:
{
inputs,
pkgs,
lib,
config,
self,
host,
...
}:
let
desktop = host == "oganesson" || host == "phosphorous";
screenshot_bind = if desktop then
[
"super, print, exec, grimblast copy area"
"super shift, print, exec, grimblast --freeze copy area"
]
else
[
# My laptop does not have a printscreen button
"super, insert, exec, grimblast copy area"
];
screenshot_bind =
if desktop then
[
"super, print, exec, grimblast copy area"
"super shift, print, exec, grimblast --freeze copy area"
]
else
[
# My laptop does not have a printscreen button
"super, insert, exec, grimblast copy area"
];
scheme = config.lib.stylix.colors;
mons = config.movOpts.envConfig.hyprlandConfig.monitorNames;
smartGapsWorkspaces = [
"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
smartGapsWindowrules = [
"border_size 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]"
"rounding 0, match:float 0, match:workspace f[1]"
];
in {
#smartGapsWorkspaces = [
#"w[tv1], gapsout:0, gapsin:0"
#"f[1], gapsout:0, gapsin:0"
#];
#smartGapsWindowrules = [
#"border_size 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]"
#"rounding 0, match:float 0, match:workspace f[1]"
#];
hostWorkspaces =
if (host == "phosphorous") then
[
"m[DP-3], layoutopt:orientation:top"
]
else
[ ];
in
{
options = {
movOpts.envConfig.hyprlandConfig = {
@@ -36,7 +53,10 @@ in {
type = lib.types.listOf lib.types.str;
# 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
default = [ "DP-1" "HDMI-A-1" ];
default = [
"DP-1"
"HDMI-A-1"
];
};
};
};
@@ -53,23 +73,32 @@ in {
wayland
direnv
];
systemd.user.targets.hyprland-session.Unit.Wants =
[ "xdg-desktop-autostart.target" ];
systemd.user.targets.hyprland-session.Unit.Wants = [ "xdg-desktop-autostart.target" ];
wayland.windowManager.hyprland = {
enable = true;
xwayland = { enable = true; };
xwayland = {
enable = true;
};
systemd.enable = true;
extraConfig = ''
source = ~/.local/state/sysflake/hyprland-colors.conf
'';
};
wayland.windowManager.hyprland = {
settings = {
monitor = if (host == "oganesson") then [
"DP-1, 1920x1080@144, 1920x0, 1"
"HDMI-A-1, 1920x1080, 0x0, 1"
] else if (host == "phosphorous") then [
"DP-1, highrr, 0x0, 1"
"DP-3, highrr, -1080x-420, 1, transform, 3"
] else
[ "eDP-1, 1600x900, 0x0, 1" ];
monitor =
if (host == "oganesson") then
[
"DP-1, 1920x1080@144, 1920x0, 1"
"HDMI-A-1, 1920x1080, 0x0, 1"
]
else if (host == "phosphorous") then
[
"DP-1, highrr, 0x0, 1"
"DP-3, highrr, -1080x-420, 1, transform, 3"
]
else
[ "eDP-1, 1600x900, 0x0, 1" ];
exec-once = [
"waybar &"
@@ -82,26 +111,37 @@ in {
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &"
];
workspace = (if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then [
"1,persistent=true,monitor:${builtins.elemAt mons 0}"
"2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 1}"
"5,persistent=true,monitor:${builtins.elemAt mons 1}"
"6,persistent=true,monitor:${builtins.elemAt mons 1}"
] else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "singlemonitor") then [
"1,persistent=true,monitor:${builtins.elemAt mons 0} "
"2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 0}"
] else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "trimonitor") then [
workspace =
hostWorkspaces
++ (
if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "dualmonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 0}"
"2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 1}"
"5,persistent=true,monitor:${builtins.elemAt mons 1}"
"6,persistent=true,monitor:${builtins.elemAt mons 1}"
]
else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "singlemonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 0} "
"2,persistent=true,monitor:${builtins.elemAt mons 0}"
"3,persistent=true,monitor:${builtins.elemAt mons 0}"
"4,persistent=true,monitor:${builtins.elemAt mons 0}"
]
else if (config.movOpts.envConfig.hyprlandConfig.workspaceLayout == "trimonitor") then
[
"1,persistent=true,monitor:${builtins.elemAt mons 2}"
"2,persistent=true,monitor:${builtins.elemAt mons 2}"
"3,persistent=true,monitor:${builtins.elemAt mons 1}"
"4,persistent=true,monitor:${builtins.elemAt mons 1}"
"5,persistent=true,monitor:${builtins.elemAt mons 0}"
"6,persistent=true,monitor:${builtins.elemAt mons 0}"
] else [ ]) ++ smartGapsWorkspaces;
]
else
[ ]
);
env = [
"XDG_CONFIG_HOME,$HOME/.config"
@@ -109,60 +149,64 @@ in {
"XDG_CACHE_HOME,$HOME/.cache"
];
layerrule = [
"match:namespace = waybar, blur 1"
"match:namespace = waybar, ignore_alpha 0"
"blur on, ignore_alpha 0, match:namespace waybar"
"match:namespace = launcher, blur 1"
];
windowrule = [
# From old windowrulev2
"float true, match:class ^(thunar)$, match:title ^(.*File Operation Progress.*)$"
"float true, match:class ^(firefox)$, match:title ^(Library)$"
"float true, match:class ^(thunar)$, match:title ^(File Operation Progress)$"
"float true, match:class ^(thunar)$, match:title ^(Confirm to replace files)$"
"float true, match:title ^(bwarn)$"
"no_initial_focus on, match:class ^(steam)$"
"float true, match:class ^(firefox)$, match:title ^( - Google Mozilla Firefox)$"
"float true, match:class ^(firefox)$, match:title ^(Firefox Sharing Indicator)$"
"float true, match:class ^(firefox)$, match:title ^(Firefox )$"
"float true, match:class ^(firefox)$, match:title ^(.*Sign in.*)$"
# From old windowrule
"float true, match:class ^(qt5ct)$"
"float true, match:class ^(zoom)$"
"float true, match:class ^(Steam)$"
"idle_inhibit focus, match:class ^(mpv)$"
"float true, match:title ^(Picture-in-Picture)$"
"float true, match:class ^(nm-connection-editor)$"
"float true, match:class ^(waypaper)$"
"float true, match:title ^(Sign In)(.*)$"
"float true, match:title ^(Firefox )$"
"no_focus on, match:title ^(Firefox )$"
"float true, match:class ^(firefox)$, match:title ^(Sign in - Google Accounts Mozilla Firefox)$"
"size 0 0, match:title ^(Firefox )$"
"move 100%-470 15, match:title ^(Firefox Sharing Indicator)$"
"move 100%-470 15, match:title ^(Firefox )$"
] ++ smartGapsWindowrules;
windowrule = [
# From old windowrulev2
"float true, match:class ^(thunar)$, match:title ^(.*File Operation Progress.*)$"
"float true, match:class ^(firefox)$, match:title ^(Library)$"
"float true, match:class ^(thunar)$, match:title ^(File Operation Progress)$"
"float true, match:class ^(thunar)$, match:title ^(Confirm to replace files)$"
"float true, match:title ^(bwarn)$"
"no_initial_focus on, match:class ^(steam)$"
"float true, match:class ^(firefox)$, match:title ^( - Google Mozilla Firefox)$"
"float true, match:class ^(firefox)$, match:title ^(Firefox Sharing Indicator)$"
"float true, match:class ^(firefox)$, match:title ^(Firefox )$"
"float true, match:class ^(firefox)$, match:title ^(.*Sign in.*)$"
# From old windowrule
"float true, match:class ^(qt5ct)$"
"float true, match:class ^(zoom)$"
"float true, match:class ^(Steam)$"
"idle_inhibit focus, match:class ^(mpv)$"
"float true, match:title ^(Picture-in-Picture)$"
"float true, match:class ^(nm-connection-editor)$"
"float true, match:class ^(waypaper)$"
"float true, match:title ^(Sign In)(.*)$"
"float true, match:title ^(Firefox )$"
"no_focus on, match:title ^(Firefox )$"
"float true, match:class ^(firefox)$, match:title ^(Sign in - Google Accounts Mozilla 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 )$"
];
cursor = {
no_hardware_cursors = true;
};
input = {
kb_layout = "us";
follow_mouse = 1;
accel_profile = "flat";
follow_mouse_threshold = 5;
force_no_accel = 1;
sensitivity = 0;
};
general = {
gaps_in = 5;
gaps_out = "0, 9, 9, 9"; # top, right, bottom, left
border_size = 3;
"col.active_border" = lib.mkForce "rgba(404042ff)";
"col.inactive_border" = lib.mkForce "rgba(83858a00)";
layout = "dwindle";
resize_on_border = true;
general = {
gaps_in = 5;
gaps_out = "0, 9, 9, 9"; # top, right, bottom, left
border_size = 3;
"col.active_border" = lib.mkForce "rgba(404042ff)";
"col.inactive_border" = lib.mkForce "rgba(83858a00)";
layout = "master";
resize_on_border = true;
snap = {
enabled = true;
window_gap = 5;
};
};
snap = {
enabled = true;
window_gap = 5;
};
};
misc = {
font_family = "EnvyCodeR Nerd Font Mono";
disable_autoreload = true;
@@ -179,7 +223,6 @@ in {
};
dwindle = {
force_split = 2;
pseudotile = "yes";
preserve_split = "yes";
};
@@ -187,85 +230,95 @@ in {
master = {
new_status = "master";
special_scale_factor = 1;
mfact = 0.65;
new_on_top = true;
};
decoration = {
rounding = 4;
blur = {
enabled = true;
size = 8;
passes = 2;
};
shadow = {
enabled = true;
ignore_window = true;
range = 80;
render_power = 50;
};
enabled = true;
ignore_window = true;
range = 20;
render_power = 50;
};
};
cursor = {
hide_on_key_press = true;
};
cursor = {
hide_on_key_press = true;
};
animations = {
enabled = true;
bezier = [
"myBezier, 0.16, 1, 0.3, 1"
"myBezier, 0.16, 1, 0.3, 1"
];
animation = [
"windows, 1, 7, myBezier, popin 80%"
"fade, 1, 7, myBezier"
"workspaces, 1, 6, myBezier, slidefade 80%"
"fade, 1, 7, myBezier"
"workspaces, 1, 6, myBezier, slidefade 80%"
];
};
bind = [
"super, up, exec, pactl set-sink-volume @default_sink@ +10%"
"super, down, exec, pactl set-sink-volume @default_sink@ -10%"
"super, t, exec, swaync-client -t -sw"
"super, a, exec, firefox"
"super, q, exec, kitty"
"super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty"
"super, c, killactive,"
"super shift, c,exec, hyprctl kill"
"super, e, exec, [float;size 40% 50%;move onscreen cursor -50% -50%] nemo"
"super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt"
"super shift, m, exit,"
"super, m, exec, fuzzel"
"super, r, exec, neovide"
"super, b, togglesplit, # dwindle"
"super, f, togglefloating"
"super, g, fullscreen"
"super, h, movefocus, l"
"super, l, movefocus, r"
"super, k, movefocus, u"
"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, l, movewindow, r"
"super shift, k, movewindow, u"
"super shift, j, movewindow, d"
"super, d, exec, switchmon"
"super, 1, exec, hyprctl 'dispatch workspace 1'"
"super, 2, exec, hyprctl 'dispatch workspace 2'"
"super, 3, exec, hyprctl 'dispatch workspace 3'"
"super, 4, exec, hyprctl 'dispatch workspace 4'"
"super, 5, exec, hyprctl 'dispatch workspace 5'"
"super, 6, exec, hyprctl 'dispatch workspace 6'"
"super shift, 1, movetoworkspace, 1"
"super shift, 2, movetoworkspace, 2"
"super shift, 3, movetoworkspace, 3"
"super shift, 4, movetoworkspace, 4"
"super shift, 5, movetoworkspace, 5"
"super shift, 6, movetoworkspace, 6"
"super, s, togglespecialworkspace, magic"
"super shift, s, movetoworkspace, special:magic"
] ++ screenshot_bind;
bindm =
[ "super, mouse:272, movewindow" "super, mouse:273, resizewindow" ];
bind = [
"super, up, exec, pactl set-sink-volume @default_sink@ +10%"
"super, down, exec, pactl set-sink-volume @default_sink@ -10%"
"super, t, exec, swaync-client -t -sw"
"super, a, exec, firefox"
"super, q, exec, kitty"
"super shift, q, exec, [float;size 40% 30%;move onscreen cursor -50% -50%] kitty"
"super, c, killactive,"
"super shift, c,exec, hyprctl kill"
"super, e, exec, [float;size 40% 50%;move onscreen cursor -50% -50%] nemo"
"super, p, exec, [float;size 40% 25%;move onscreen cursor] [ ! -f /tmp/keyringfile ] && kitty toolbelt"
"super shift, m, exit,"
"super, m, exec, fuzzel"
"super, r, exec, neovide"
"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, g, fullscreen"
"super, h, movefocus, l"
"super, l, movefocus, r"
"super, k, movefocus, u"
"super, j, movefocus, d"
"super shift, h, movewindow, l"
"super shift, l, movewindow, r"
"super shift, k, movewindow, u"
"super shift, j, movewindow, d"
"super, d, exec, switchmon"
"super, 1, exec, hyprctl 'dispatch workspace 1'"
"super, 2, exec, hyprctl 'dispatch workspace 2'"
"super, 3, exec, hyprctl 'dispatch workspace 3'"
"super, 4, exec, hyprctl 'dispatch workspace 4'"
"super, 5, exec, hyprctl 'dispatch workspace 5'"
"super, 6, exec, hyprctl 'dispatch workspace 6'"
"super shift, 1, movetoworkspace, 1"
"super shift, 2, movetoworkspace, 2"
"super shift, 3, movetoworkspace, 3"
"super shift, 4, movetoworkspace, 4"
"super shift, 5, movetoworkspace, 5"
"super shift, 6, movetoworkspace, 6"
"super, s, togglespecialworkspace, magic"
"super shift, s, movetoworkspace, special:magic"
]
++ screenshot_bind;
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 = {
mv = "mv -v";
cp = "cp -vr";
gt = "gtrash";
gtp = "${pkgs.myScripts.playshellsound}/bin/playshellsound ${self}/assets/sound/rm.wav && gtrash put";
diff = "diff --color=auto";
sr = "source ~/.fernrc";
sr = "source ~/.shedrc";
psg = "ps aux | grep -v grep | grep -i -e VSZ -e";
mkdir = "mkdir -p";
pk = "pkill -9 -f";
@@ -20,14 +26,17 @@
mkexe = "chmod +x";
shortdate = "date +%m-%d-%y";
suvi = "sudoedit";
suvide = "EDITOR=neovide; suvi";
suvide = "EDITOR=neovide suvi";
rustdev = "nix develop github:km-clay/devshells#rust";
y = "yazi";
ga = "playshellsound ${self}/assets/sound/gitadd.wav; git add";
gcomm = "gitcommit_sfx";
gpush = "gitpush_sfx";
gpull = "gitpull_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 = [
./env.nix
./complete.nix
./aliases.nix
./extraconfig.nix
./options.nix
./keymaps.nix
./functions.nix
./autocmd.nix
];
}

View File

@@ -1,6 +1,6 @@
{ lib, config, ... }:
{
programs.fern = {
programs.shed = {
environmentVars = {
SOUNDS_ENABLED = "true";
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, ... }:
{
programs.fern = {
programs.shed = {
enable = true;
settings = {
autocd = true;
autoHistory = true;
maxHistoryEntries = -1;
};
};
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,8 @@
{
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 {
programs.zsh = {

View File

@@ -1,4 +1,10 @@
{ lib, config, self, pkgs, ... }:
{
lib,
config,
self,
pkgs,
...
}:
let
shellsound = "${pkgs.myScripts.playshellsound}/bin/playshellsound";
@@ -8,7 +14,8 @@ let
in
{
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 {
programs.zsh = {

View File

@@ -2,7 +2,8 @@
{
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 {
programs.zoxide = {

View File

@@ -1,44 +1,55 @@
{ pkgs, lib, self, config, ... }:
{
pkgs,
lib,
self,
config,
...
}:
# 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.
let
# Extract color scheme from base_16 yaml file
extractSchemeFromYaml = base16_scheme: let
scheme_path = "${pkgs.base16-schemes}/share/themes/${base16_scheme}.yaml";
scheme_string = builtins.readFile scheme_path;
scheme_list = lib.splitString "\n" scheme_string; # Split into a list
colors =
lib.filter (line: builtins.match "^ *base[0-9A-F]{2}: .*" line != null) # Get raw hex values from scheme list
scheme_list;
parsed_scheme = lib.lists.foldl' (acc: line: # Initialize attribute set and begin folding values into it
let
splitLine = lib.splitString ": " line; # Split into keys (base00, base01, etc.) and values
key = builtins.elemAt splitLine 0;
value = builtins.elemAt splitLine 1;
trimmedKey = lib.trim key; # Start cleaning values
cleanValue_step1 = lib.splitString " " value;
cleanValue_step2 = builtins.elemAt cleanValue_step1 0; # Get just the hex value, ignore comments etc.
cleanValue_final =
builtins.substring 1 (builtins.stringLength cleanValue_step2 - 2)
cleanValue_step2;
in acc // { "${trimmedKey}" = cleanValue_final; }) { } colors; # Accumulate keys/values into attribute set
in parsed_scheme; # Return parsed color scheme
extractSchemeFromYaml =
base16_scheme:
let
scheme_path = "${pkgs.base16-schemes}/share/themes/${base16_scheme}.yaml";
scheme_string = builtins.readFile scheme_path;
scheme_list = lib.splitString "\n" scheme_string; # Split into a list
colors =
lib.filter (line: builtins.match "^ *base[0-9A-F]{2}: .*" line != null) # Get raw hex values from scheme list
scheme_list;
parsed_scheme = lib.lists.foldl' (
acc: line: # Initialize attribute set and begin folding values into it
let
splitLine = lib.splitString ": " line; # Split into keys (base00, base01, etc.) and values
key = builtins.elemAt splitLine 0;
value = builtins.elemAt splitLine 1;
trimmedKey = lib.trim key; # Start cleaning values
cleanValue_step1 = lib.splitString " " value;
cleanValue_step2 = builtins.elemAt cleanValue_step1 0; # Get just the hex value, ignore comments etc.
cleanValue_final = builtins.substring 1 (
builtins.stringLength cleanValue_step2 - 2
) cleanValue_step2;
in
acc // { "${trimmedKey}" = cleanValue_final; }
) { } colors; # Accumulate keys/values into attribute set
in
parsed_scheme; # Return parsed color scheme
ssh_scheme = extractSchemeFromYaml "atelier-cave" ;
nix-shell_scheme = extractSchemeFromYaml "blueish";
ssh_scheme = extractSchemeFromYaml "atelier-cave";
nix-shell_scheme = extractSchemeFromYaml "blueish";
def_scheme = config.lib.stylix.colors;
# Custom theme for nix-shell
in {
in
{
options = {
movOpts.homeFiles.enable =
lib.mkEnableOption "enables declared custom files";
movOpts.homeFiles.enable = lib.mkEnableOption "enables declared custom files";
};
config = {
home.file = {
".config/neofetch/config.conf".text = ''
".config/fastfetch/config.conf".text = ''
username=$(whoami)
name_length=''${#username}
total_width=40

View File

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

View File

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

View File

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

View File

@@ -1,9 +1,17 @@
{ lib, config, inputs, pkgs, ... }: {
{
lib,
config,
inputs,
pkgs,
...
}:
{
options = {
movOpts.programConfigs.cavaConfig.enable =
lib.mkEnableOption "enables my cava settings";
movOpts.programConfigs.cavaConfig.enable = lib.mkEnableOption "enables my cava settings";
};
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) ]
++ [ (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) ];
{
env,
host,
nixvim,
self,
inputs,
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 = {
movOpts.programConfigs.ezaConfig.enable =
lib.mkEnableOption "enables my eza options";
movOpts.programConfigs.ezaConfig.enable = lib.mkEnableOption "enables my eza options";
};
config = lib.mkIf config.movOpts.programConfigs.ezaConfig.enable {
programs.eza = {
enable = true;
enableZshIntegration = false;
extraOptions = [ "-1" "-h" "--group-directories-first" ];
extraOptions = [
"-1"
"-h"
"--group-directories-first"
];
icons = "auto";
git = true;
};

View File

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

View File

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

View File

@@ -1,7 +1,13 @@
{ lib, config, username, pkgs, ... }: {
{
lib,
config,
username,
pkgs,
...
}:
{
options = {
movOpts.programConfigs.gitConfig.enable =
lib.mkEnableOption "enables my git configuration";
movOpts.programConfigs.gitConfig.enable = lib.mkEnableOption "enables my git configuration";
};
config = lib.mkIf config.movOpts.programConfigs.gitConfig.enable {
programs.git = {
@@ -14,6 +20,11 @@
alias = {
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";
interactive.diffFilter = "delta --color-only";
delta.navigate = "true";

View File

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

View File

@@ -1,19 +1,18 @@
{ pkgs, self, ... }: {
{ pkgs, self, ... }:
{
programs.nixvim = {
autoCmd = [
{
command = "silent! mkview";
event = [ "BufWinLeave" ];
pattern = [ "*" ];
desc =
"Save session window settings to be loaded next time the file is opened";
desc = "Save session window settings to be loaded next time the file is opened";
}
{
command = "silent! loadview";
event = [ "BufWinEnter" ];
pattern = [ "*" ];
desc =
"Load previous session window settings for the opened file (folds, cursor pos, etc)";
desc = "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";
@@ -21,6 +20,31 @@
pattern = [ "*" ];
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 = {
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>";
mode = "n";
}
{
action = "zA";
key = "<CR>";
mode = "n";
}
{
action = "<C-w>w";
key = "<Tab>";
@@ -44,12 +49,145 @@
{
action = "<cmd>FloatermToggle def_term<CR>";
key = "<F2>";
mode = [ "n" "t" ];
mode = [
"n"
"t"
];
}
{
action = "<cmd>COQnow<CR>";
key = "!cq";
mode = "n";
action = "<cmd>lua require('treesj').toggle()<CR>";
key = "<space>j";
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, ... }:
let scheme = config.lib.stylix.colors;
in {
let
scheme = config.lib.stylix.colors;
in
{
programs.nixvim = {
colorschemes.base16 = {
enable = true;
colorscheme = "chalk";
colorscheme = "seti";
#colorscheme = {
# base00 = "#${scheme.base00}";
# base01 = "#${scheme.base01}";
@@ -30,7 +32,12 @@ in {
virtual_text = true;
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
vim.o.laststatus = 0
end
@@ -43,7 +50,7 @@ in {
vim.filetype.add({
filename = {
[".fernrc"] = "sh",
[".shedrc"] = "sh",
}
})
@@ -57,6 +64,7 @@ in {
vim.opt.termguicolors = true
vim.opt.ruler = true
vim.opt.scrolloff = 6
vim.opt.foldlevelstart = 99
vim.opt.undofile = true
vim.opt.foldmethod = "manual"
vim.opt.wrap = true
@@ -65,8 +73,17 @@ in {
vim.opt.breakat = " \t!@*-+;:,./?"
vim.opt.guifont = "EnvyCodeR Nerd Font Mono:h18"
vim.g.mapleader = "!"
vim.g.mapleader = " "
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 = {
plugins.barbar = {
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,9 +1,17 @@
{
programs.nixvim.plugins.copilot-lua = {
enable = true;
settings = {
suggestion = {
auto_trigger = false;
programs.nixvim = {
plugins = {
copilot-lua = {
enable = true;
settings = {
suggestion = {
auto_trigger = false;
};
};
};
opencode = {
enable = true;
};
};
};

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