alpine: many changes

- updates
- snapserver
- graphana dashboards
- loki
- ddclient
- arr suite, jellyseer
- mautrix fixes
This commit is contained in:
Tristan 2025-01-18 00:18:11 +00:00
parent d1772cb4be
commit 123e7088f5
58 changed files with 2136 additions and 735 deletions

2
.rgignore Normal file
View file

@ -0,0 +1,2 @@
lib/words.txt
flake.lock

View file

@ -6,3 +6,7 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *alpine - *alpine
- path_regex: certs/.*.key
key_groups:
- age:
- *alpine

View file

@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIDljCCAxygAwIBAgISBBQT2OlSax8juBh/IQex2igaMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NTAeFw0yNDEwMTMwMTQ4MDFaFw0yNTAxMTEwMTQ4MDBaMCYxJDAiBgNVBAMTG2Fs
cGluZS5wcmF3bi1qdXN0aWNlLnRzLm5ldDBZMBMGByqGSM49AgEGCCqGSM49AwEH
A0IABNB7TDo//14hkP6lbTpMessnFDWiXCQ55C/+rPRuMK0kxMV9Uj9hVCaq6YI1
Nxug1DBmQvAVtMNho60wCUR0ocijggIcMIICGDAOBgNVHQ8BAf8EBAMCB4AwHQYD
VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0O
BBYEFL+YrMuDYngdndFxmQ8DyIaF5FZuMB8GA1UdIwQYMBaAFJ8rX888IU+dBLft
KyzExnCL0tcNMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL2U1
Lm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vZTUuaS5sZW5jci5vcmcv
MCYGA1UdEQQfMB2CG2FscGluZS5wcmF3bi1qdXN0aWNlLnRzLm5ldDATBgNVHSAE
DDAKMAgGBmeBDAECATCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2AD8XS0/XIkdY
lB1lHIS+DRLtkDd/H4Vq68G/KIXs+GRuAAABkoPFMKkAAAQDAEcwRQIhAMB1F+1H
QkW08Lu2AQr8bcYCqg43niOw2EHl9cTqIMngAiBOQz14/mZsA09MjLO4QSgnC8pW
wSHaf791o2N/HPHWiAB1ABNK3xq1mEIJeAxv70x6kaQWtyNJzlhXat+u2qfCq+Ai
AAABkoPFMagAAAQDAEYwRAIgR3BMtNMq8ubpJQanyZ5VPkX7OCIVyjmWD/iQDKHo
VkUCIBXczglskWwyZEwhCv1lNmgCfZmIF32rywaEsKBjQ/2QMAoGCCqGSM49BAMD
A2gAMGUCMQCruWjBoT4D97a/TQACEWs2UZ5ZUm+RmZS7VA4kVm9Q1bFFrftD1FEQ
dB88W+jYPN8CMAervvI7Jb19X+wDktnp958XUodwOhhd0NNvQ4HS/TEUxSDV04Xb
FahrrdXWaqt3nQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAIOPbGPOsTmMYgZigxXJ/d4wDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNCzqK
a2GOtu/cX1jnxkJFVKtj9mZhSAouWXW0gQI3ULc/FnncmOyhKJdyIBwsz9V8UiBO
VHhbhBRrwJCuhezAUUE8Wod/Bk3U/mDR+mwt4X2VEIiiCFQPmRpM5uoKrNijgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfK1/PPCFPnQS37SssxMZw
i9LXDTAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAH3KdNEVCQdqk0LKyuNImTKdRJY1C
2uw2SJajuhqkyGPY8C+zzsufZ+mgnhnq1A2KVQOSykOEnUbx1cy637rBAihx97r+
bcwbZM6sTDIaEriR/PLk6LKs9Be0uoVxgOKDcpG9svD33J+G9Lcfv1K9luDmSTgG
6XNFIN5vfI5gs/lMPyojEMdIzK9blcl2/1vKxO8WGCcjvsQ1nJ/Pwt8LQZBfOFyV
XP8ubAp/au3dc4EKWG9MO5zcx1qT9+NXRGdVWxGvmBFRAajciMfXME1ZuGmk3/GO
koAM7ZkjZmleyokP1LGzmfJcUd9s7eeu1/9/eg5XlXd/55GtYjAM+C4DG5i7eaNq
cm2F+yxYIPt6cbbtYVNJCGfHWqHEQ4FYStUyFnv8sjyqU8ypgZaNJ9aVcWSICLOI
E1/Qv/7oKsnZCWJ926wU6RqG1OYPGOi1zuABhLw61cuPVDT28nQS/e6z95cJXq0e
K1BcaJ6fJZsmbjRgD5p3mvEf5vdQM7MCEvU0tHbsx2I5mHHJoABHb8KVBgWp/lcX
GWiWaeOyB7RP+OfDtvi2OsapxXiV7vNVs7fMlrRjY1joKaqmmycnBvAq14AEbtyL
sVfOS66B8apkeFX2NY4XPEYV4ZSCe8VHPrdrERk2wILG3T/EGmSIkCYVUMSnjmJd
VQD9F6Na/+zmXCc=
-----END CERTIFICATE-----

View file

@ -0,0 +1,20 @@
{
"data": "ENC[AES256_GCM,data:8ILElQXr1whCq6/Jvh2+0RN23cKn4Hd6GHd4/1pwfPzp+dzCcKe3gN4LY4NwTNM3fCeW2gX3DWHqXJxGxxjhlpLnFuEu9Q6eVAhjBIAEdUOAaOefQgBsY805hJ2+3oaASO1gTW64M4Rb7twhlJvtzfvl6dy5JuASv/mp3qlpmoIitFe0h1EAi0QkG5y1K7bDrmca7g9PhdelnJeIBAj9vjevtQAtJe3C1G/R3kfCLnPJQAC1BDBt97CXCux8uWgqSjH4ndp6c2cJH9UK87rB/w1+7ihSQGAfEAHNrdXMCSkcC9w=,iv:GiLNz81b7gLQZiX01wXQlYRogXwdyqX7HwOfVLUQHoo=,tag:MC6YZkidZHePXWTiUogJkQ==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": [
{
"recipient": "age106vffwu4y8cx90y0rtzajgpafl8jq7ty5hf6pur2gjsuq3g2lf5qjmdq0q",
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFbVI0M0o3TEFObEQ0RVJo\ncFp4djEvTzdndFV0OU5PKyt6WlpRYlowUlZBCkJYZm9JS1VZRGhwQ1c0K1JBVHIy\nelJNd3E1eUlPUDVGdUd3YzJrenFUY3cKLS0tIGhWWUt2TUthR1BncjN4UW9kQ1Vl\nM3JuVkUvZkZoM1ZabXhnRG1lRktrazAKesQXHUogJ0bo34Ibp5JxqaG7OCrbUteh\nrIyWr1bUQruhffOVJo+SQzKtNMwA2XwwU1xJb4YbBUXwe9/4G8KpqQ==\n-----END AGE ENCRYPTED FILE-----\n"
}
],
"lastmodified": "2024-10-13T03:10:45Z",
"mac": "ENC[AES256_GCM,data:iY5zcanENCJLwwaK0Gz/HZTAXvwbHDK5AZ7buHVjg22jQlFKlg46abBy1KIBOzurH7Z8i7lLSSF1DFzGbR63NjEWFiv4hJsDuFgvLxFm/GxERl+JnadKaaooYQavkE99J1uiPIr7BCZppC+MdvqG1IqkSeLO737KLniisprKe1g=,iv:VtHXpnZVoTpmLcmSVxvCZSxongAXwelE02OA/5afQ9k=,tag:y2GmUBzg6tspfjZi8TyhuQ==,type:str]",
"pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.9.0"
}
}

697
flake.lock generated
View file

@ -18,39 +18,6 @@
"type": "github" "type": "github"
} }
}, },
"base16-alacritty": {
"flake": false,
"locked": {
"lastModified": 1703982197,
"narHash": "sha256-TNxKbwdiUXGi4Z4chT72l3mt3GSvOcz6NZsUH8bQU/k=",
"owner": "aarowill",
"repo": "base16-alacritty",
"rev": "c95c200b3af739708455a03b5d185d3d2d263c6e",
"type": "github"
},
"original": {
"owner": "aarowill",
"repo": "base16-alacritty",
"type": "github"
}
},
"base16-alacritty-yaml": {
"flake": false,
"locked": {
"lastModified": 1674275109,
"narHash": "sha256-Adwx9yP70I6mJrjjODOgZJjt4OPPe8gJu7UuBboXO4M=",
"owner": "aarowill",
"repo": "base16-alacritty",
"rev": "63d8ae5dfefe5db825dd4c699d0cdc2fc2c3eaf7",
"type": "github"
},
"original": {
"owner": "aarowill",
"repo": "base16-alacritty",
"rev": "63d8ae5dfefe5db825dd4c699d0cdc2fc2c3eaf7",
"type": "github"
}
},
"base16-fish": { "base16-fish": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -67,30 +34,14 @@
"type": "github" "type": "github"
} }
}, },
"base16-foot": {
"flake": false,
"locked": {
"lastModified": 1696725948,
"narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
"owner": "tinted-theming",
"repo": "base16-foot",
"rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-foot",
"type": "github"
}
},
"base16-helix": { "base16-helix": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696727917, "lastModified": 1725860795,
"narHash": "sha256-FVrbPk+NtMra0jtlC5oxyNchbm8FosmvXIatkRbYy1g=", "narHash": "sha256-Z2o8VBPW3I+KKTSfe25kskz0EUj7MpUh8u355Z1nVsU=",
"owner": "tinted-theming", "owner": "tinted-theming",
"repo": "base16-helix", "repo": "base16-helix",
"rev": "dbe1480d99fe80f08df7970e471fac24c05f2ddb", "rev": "7f795bf75d38e0eea9fed287264067ca187b88a9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -99,55 +50,74 @@
"type": "github" "type": "github"
} }
}, },
"base16-kitty": {
"flake": false,
"locked": {
"lastModified": 1665001328,
"narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
"owner": "kdrag0n",
"repo": "base16-kitty",
"rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
"type": "github"
},
"original": {
"owner": "kdrag0n",
"repo": "base16-kitty",
"type": "github"
}
},
"base16-tmux": {
"flake": false,
"locked": {
"lastModified": 1696725902,
"narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
"owner": "tinted-theming",
"repo": "base16-tmux",
"rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-tmux",
"type": "github"
}
},
"base16-vim": { "base16-vim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1663659192, "lastModified": 1716150083,
"narHash": "sha256-uJvaYYDMXvoo0fhBZUhN8WBXeJ87SRgof6GEK2efFT0=", "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=",
"owner": "chriskempson", "owner": "tinted-theming",
"repo": "base16-vim", "repo": "base16-vim",
"rev": "3be3cd82cd31acfcab9a41bad853d9c68d30478d", "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "chriskempson", "owner": "tinted-theming",
"repo": "base16-vim", "repo": "base16-vim",
"type": "github" "type": "github"
} }
}, },
"devshell": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1722113426,
"narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=",
"owner": "numtide",
"repo": "devshell",
"rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"flake-compat": { "flake-compat": {
"flake": false,
"locked": {
"lastModified": 1717312683,
"narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"revCount": 57,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
"flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1673956053,
@ -163,6 +133,66 @@
"type": "github" "type": "github"
} }
}, },
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1726153070,
"narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": [
"stylix",
"systems"
]
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": { "fromYaml": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -179,19 +209,71 @@
"type": "github" "type": "github"
} }
}, },
"git-hooks": {
"inputs": {
"flake-compat": [
"nixvim",
"flake-compat"
],
"gitignore": "gitignore",
"nixpkgs": [
"nixvim",
"nixpkgs"
],
"nixpkgs-stable": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1726745158,
"narHash": "sha256-D5AegvGoEjt4rkKedmxlSEmC+nNLMBPWFxvmYnVLhjk=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "4e743a6920eab45e8ba0fbe49dc459f1423a4b74",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"nixvim",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gnome-shell": { "gnome-shell": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1698794309, "lastModified": 1713702291,
"narHash": "sha256-/TIkZ8y5Wv3QHLFp79Poao9fINurKs5pa4z0CRe+F8s=", "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
"owner": "GNOME", "owner": "GNOME",
"repo": "gnome-shell", "repo": "gnome-shell",
"rev": "a7c169c6c29cf02a4c392fa0acbbc5f5072823e7", "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "GNOME", "owner": "GNOME",
"ref": "45.1", "ref": "46.1",
"repo": "gnome-shell", "repo": "gnome-shell",
"type": "github" "type": "github"
} }
@ -203,11 +285,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1713166971, "lastModified": 1727346017,
"narHash": "sha256-t0P/rKlsE5l1O3O2LYtAelLzp7PeoPCSzsIietQ1hSM=", "narHash": "sha256-z7OCFXXxIseJhEHiCkkUOkYxD9jtLU8Kf5Q9WC0SjJ8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "1c43dcfac48a2d622797f7ab741670fdbcf8f609", "rev": "c124568e1054a62c20fbe036155cc99237633327",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -217,19 +299,38 @@
"type": "github" "type": "github"
} }
}, },
"home-manager-cosmic": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1728250817,
"narHash": "sha256-OVHpUlNxHpQUe2Waav/MR+Z7fm6ft/w8SxWlvXv+AdU=",
"owner": "tristanbeedell",
"repo": "home-manager",
"rev": "ce770a3e442b2105852a6f5f79f3645b4c64505c",
"type": "github"
},
"original": {
"owner": "tristanbeedell",
"ref": "cosmic",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": { "home-manager_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"stylix", "nixvim",
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1706001011, "lastModified": 1726985855,
"narHash": "sha256-J7Bs9LHdZubgNHZ6+eE/7C18lZ1P6S5/zdJSdXFItI4=", "narHash": "sha256-NJPGK030Y3qETpWBhj9oobDQRbXdXOPxtu+YgGvZ84o=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "3df2a80f3f85f91ea06e5e91071fa74ba92e5084", "rev": "04213d1ce4221f5d9b40bcee30706ce9a91d148d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -238,13 +339,126 @@
"type": "github" "type": "github"
} }
}, },
"home-manager_3": {
"inputs": {
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1724435763,
"narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1727003835,
"narHash": "sha256-Cfllbt/ADfO8oxbT984MhPHR6FJBaglsr1SxtDGbpec=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "bd7d1e3912d40f799c5c0f7e5820ec950f1e0b3d",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"nixos-cosmic": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1727314564,
"narHash": "sha256-UE98O6EQYUiDp7rypkBfJG0XSz0c5FxkslyP+7Gskt8=",
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"rev": "f2aa34f521da1d6335301fc1b58dde8ed779d632",
"type": "github"
},
"original": {
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1712963716, "lastModified": 1722185531,
"narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", "narHash": "sha256-veKR07psFoJjINLC8RK4DiLniGGMgF3QMlS4tb74S6k=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "cfd6b5fc90b15709b780a5a1619695a88505a176", "rev": "52ec9ac3b12395ad677e8b62106f0b98c1f8569d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1727129439,
"narHash": "sha256-nPyrcFm6FSk7CxzVW4x2hu62aLDghNcv9dX6DF3dXw8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "babc25a577c3310cce57c72d5bed70f4c3c3843a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1725762081,
"narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1727122398,
"narHash": "sha256-o8VBeCWHBxGd4kVMceIayf5GApqTavJbTa44Xcg5Rrk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -253,45 +467,13 @@
"type": "indirect" "type": "indirect"
} }
}, },
"nixpkgs-stable": {
"locked": {
"lastModified": 1713042715,
"narHash": "sha256-RifMwYuKu5v6x6O65msKDTqKkQ9crGwOB7yr20qMEuE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c27f3b6d8e29346af16eecc0e9d54b1071eae27e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-23.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1712883908,
"narHash": "sha256-icE1IJE9fHcbDfJ0+qWoDdcBXUoZCcIJxME4lMHwvSM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "a0c9e3aee1000ac2bfb0e5b98c94c946a5d180a9",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1700856099, "lastModified": 1725534445,
"narHash": "sha256-RnEA7iJ36Ay9jI0WwP+/y4zjEhmeN6Cjs9VOFBH7eVQ=", "narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "0bd59c54ef06bc34eca01e37d689f5e46b3fe2f1", "rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -301,26 +483,115 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": {
"locked": {
"lastModified": 1725194671,
"narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"devshell": "devshell",
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"home-manager": "home-manager_2",
"nix-darwin": "nix-darwin",
"nixpkgs": [
"nixpkgs"
],
"nuschtosSearch": "nuschtosSearch",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1727328717,
"narHash": "sha256-tGEVv5mFs38m6+60fNKlZn/6ucoOotfwn9FikXiYSlk=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "2ab8751b8be55accb78ca0ca58f1f4ff387001d7",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1726995581,
"narHash": "sha256-lgsE/CTkZk9OIiFGEIrxXZQ7Feiv41dqlN7pEfTdgew=",
"owner": "NuschtOS",
"repo": "search",
"rev": "3b7dd61b365ca45380707453758a45f2e9977be3",
"type": "github"
},
"original": {
"owner": "NuschtOS",
"repo": "search",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpkgs": "nixpkgs", "home-manager-cosmic": "home-manager-cosmic",
"nixos-cosmic": "nixos-cosmic",
"nixpkgs": "nixpkgs_2",
"nixvim": "nixvim",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"stable-nixpkgs": "stable-nixpkgs",
"stylix": "stylix" "stylix": "stylix"
} }
}, },
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixos-cosmic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1727231386,
"narHash": "sha256-XLloPtQHKk/Tdt8t8zIb+JhmunlH3YB9Jz8RTlQ3N/4=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "b5f76c3b09a8194889f5328a480fbea1a9115518",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"sops-nix": { "sops-nix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_3",
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable_2"
}, },
"locked": { "locked": {
"lastModified": 1713174909, "lastModified": 1726524647,
"narHash": "sha256-APoDs2GtzVrsE+Z9w72qpHzEtEDfuinWcNTN7zhwLxg=", "narHash": "sha256-qis6BtOOBBEAfUl7FMHqqTwRLB61OL5OFzIsOmRz2J4=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "cc535d07cbcdd562bcca418e475c7b1959cefa4b", "rev": "e2d404a7ea599a013189aa42947f66cede0645c8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -329,43 +600,28 @@
"type": "github" "type": "github"
} }
}, },
"stable-nixpkgs": {
"locked": {
"lastModified": 1713013257,
"narHash": "sha256-ZEfGB3YCBVggvk0BQIqVY7J8XF/9jxQ68fCca6nib+8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "90055d5e616bd943795d38808c94dbf0dd35abe8",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-23.11",
"type": "indirect"
}
},
"stylix": { "stylix": {
"inputs": { "inputs": {
"base16": "base16", "base16": "base16",
"base16-alacritty": "base16-alacritty",
"base16-alacritty-yaml": "base16-alacritty-yaml",
"base16-fish": "base16-fish", "base16-fish": "base16-fish",
"base16-foot": "base16-foot",
"base16-helix": "base16-helix", "base16-helix": "base16-helix",
"base16-kitty": "base16-kitty",
"base16-tmux": "base16-tmux",
"base16-vim": "base16-vim", "base16-vim": "base16-vim",
"flake-compat": "flake-compat", "flake-compat": "flake-compat_3",
"flake-utils": "flake-utils_2",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"home-manager": "home-manager_2", "home-manager": "home-manager_3",
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_4",
"systems": "systems_2",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-tmux": "tinted-tmux"
}, },
"locked": { "locked": {
"lastModified": 1713025302, "lastModified": 1727355527,
"narHash": "sha256-za4w2wYt1fg9EdTv5fYLwEqAyHgPmPq88HmlxirXuEk=", "narHash": "sha256-qFSPHeImI00fBzGTA94D66HMD+fJDkuz04WHp2Sg8eA=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "83866ed8800ed39519a79ea30b18c8eb21f26080", "rev": "993fcabd83d1e0ee5ea038b87041593cc73c1ebe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -373,6 +629,105 @@
"repo": "stylix", "repo": "stylix",
"type": "github" "type": "github"
} }
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"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": {
"lastModified": 1696725948,
"narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1665001328,
"narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1696725902,
"narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1726734507,
"narHash": "sha256-VUH5O5AcOSxb0uL/m34dDkxFKP6WLQ6y4I1B4+N3L2w=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "ee41a466c2255a3abe6bc50fc6be927cdee57a9f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

152
flake.nix
View file

@ -1,22 +1,25 @@
{ {
description = "A flake using my config"; description = "A flake using my config";
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs.url = "nixpkgs/nixos-unstable";
stable-nixpkgs.url = "nixpkgs/nixos-23.11";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/master"; url = "github:nix-community/home-manager/master";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
home-manager-cosmic.url = "github:tristanbeedell/home-manager/cosmic";
stylix.url = "github:danth/stylix"; stylix.url = "github:danth/stylix";
# hyprland = {
# url = "github:hyprwm/Hyprland/v0.36.0";
# inputs.nixpkgs.follows = "nixpkgs";
# };
sops-nix.url = "github:Mic92/sops-nix"; sops-nix.url = "github:Mic92/sops-nix";
nixos-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "nixpkgs";
};
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = inputs: let outputs = {nixvim, ...} @ inputs: let
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = import inputs.nixpkgs {inherit system;}; pkgs = import inputs.nixpkgs {inherit system;};
user = "tristan"; user = "tristan";
@ -27,51 +30,57 @@
in { in {
formatter.${system} = pkgs.alejandra; formatter.${system} = pkgs.alejandra;
nixosConfigurations = { nixosConfigurations = {
zenix = zenix = mkConf {
mkConf [ nixos-modules = [
./hardware/zenix.nix ./hardware/zenix.nix
(auto-login "Hyprland") ./nixos/programs/cosmic.nix
./nixos/programs/gamer.nix ./nixos/programs/gamer.nix
./nixos/programs/personal.nix ./nixos/programs/personal.nix
./nixos/workstation.nix ./nixos/workstation.nix
] [ ];
./home/workstation.nix home-modules = [
./home/desktop/hyprland/.
./home/programs/graphical.nix ./home/programs/graphical.nix
./home/programs/gamer.nix ./home/programs/gamer.nix
./home/programs/personal/. ./home/programs/personal/.
./home/programs/xr.nix
]; ];
};
FCS-Tristan-Nixbook = FCS-Tristan-Nixbook = mkConf {
mkConf [ nixos-modules = [
# inputs.hyprland.nixosModules.default
./hardware/fcs-tristan-nixbook.nix ./hardware/fcs-tristan-nixbook.nix
(auto-login "Hyprland") # (auto-login "Hyprland")
./nixos/modules/work.nix # ./nixos/programs/hyprland.nix
./nixos/workstation.nix ./nixos/workstation.nix
] [ ./nixos/modules/work.nix
./home/workstation.nix ./nixos/programs/cosmic.nix
./home/desktop/hyprland/. ];
home-modules = [
./home/programs/work.nix ./home/programs/work.nix
./home/programs/graphical.nix ./home/programs/graphical.nix
]; ];
};
alpine = mkConf [ alpine = mkConf {
./hardware/alpine.nix nixos-modules = [
./nixos/services/anki.nix ./hardware/alpine.nix
./nixos/services/forgejo.nix ./nixos/services/anki.nix
./nixos/services/vaultwarden.nix ./nixos/services/forgejo.nix
./nixos/services/jellyfin.nix ./nixos/services/vaultwarden.nix
./nixos/services/mpd.nix ./nixos/services/jellyfin.nix
./nixos/services/prometheus.nix ./nixos/services/mpd.nix
./nixos/services/grafana.nix ./nixos/services/prometheus.nix
./nixos/services/synapse.nix ./nixos/services/grafana.nix
./nixos/services/mautrix/whatsapp.nix ./nixos/services/loki.nix
./nixos/services/mautrix/signal.nix ./nixos/services/synapse/.
./nixos/services/nextcloud.nix ./nixos/services/mautrix/whatsapp.nix
./nixos/services/ntfy.nix ./nixos/services/mautrix/signal.nix
] []; ./nixos/services/nextcloud.nix
./nixos/services/ntfy.nix
./nixos/services/authentik.nix
./nixos/services/monero.nix
./nixos/services/arr.nix
];
};
vm-sway = vm-sway =
builtins.trace '' builtins.trace ''
@ -81,14 +90,30 @@
start the vm with '-vga qxl' or '-vga virtio' start the vm with '-vga qxl' or '-vga virtio'
'' ''
mkConf mkConf
[ {
./hardware/vm.nix nixos-modules = [
(auto-login "sway") ./hardware/vm.nix
./nixos/workstation.nix (auto-login "sway")
] [ ./nixos/workstation.nix
./home/desktop/sway/. ];
./home/workstation.nix home-modules = [
]; ./home/desktop/sway/.
./home/workstation.nix
];
};
vm-cosmic =
mkConf
{
nixos-modules = [
./hardware/vm.nix
./nixos/workstation.nix
./nixos/programs/cosmic.nix
];
home-modules = [
./home/workstation.nix
];
};
vm-hyprland = vm-hyprland =
builtins.trace '' builtins.trace ''
@ -100,18 +125,33 @@
start with '-vga virtio' start with '-vga virtio'
'' ''
mkConf mkConf
[ {
./hardware/vm.nix nixos-modules = [
(auto-login "Hyprland") ./hardware/vm.nix
./nixos/workstation.nix (auto-login "Hyprland")
] [ ./nixos/programs/hyprland.nix
./home/desktop/hyprland/. ];
./home/workstation.nix };
];
vm-tty = mkConf [ vm-tty =
./hardware/vm.nix mkConf
] []; {
nixos-modules = [
./hardware/vm.nix
];
};
};
packages.${system} = {
nixvim = let
nixvim' = nixvim.legacyPackages.${system};
nixvimModule = {
inherit pkgs;
module = import ./lib/nixvim.nix;
};
nvim = nixvim'.makeNixvimWithModule nixvimModule;
in
nvim;
}; };
}; };
} }

View file

@ -59,13 +59,11 @@ in {
fsType = "fuse.mergerfs"; fsType = "fuse.mergerfs";
depends = ["/mnt/disk1" "/mnt/disk2" "/mnt/disk3"]; depends = ["/mnt/disk1" "/mnt/disk2" "/mnt/disk3"];
options = [ options = [
"direct_io"
"use_ino"
"allow_other"
"minfreespace=50G" "minfreespace=50G"
"fsname=mergerfs" "fsname=mergerfs"
"category.create=mfs" "category.create=mfs"
"func.mkdir=epall" "cache.files=auto-all"
"dropcacheonclose=true"
]; ];
}; };
@ -113,9 +111,13 @@ in {
]; ];
}; };
virtualisation.oci-containers.backend = "podman";
virtualisation = { virtualisation = {
podman = { podman = {
enable = true; enable = true;
autoPrune.enable = true;
defaultNetwork.settings.dns_enabled = true;
}; };
}; };
@ -136,18 +138,11 @@ in {
globalRedirect = "tristans.cloud"; globalRedirect = "tristans.cloud";
}; };
"tristans.cloud" = { "tristans.cloud" = {
default = true;
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
root = "/srv/www/tristans.cloud"; root = "/srv/www/tristans.cloud";
}; };
"auth.tristans.cloud" = {
forceSSL = true;
enableACME = true;
locations."~" = {
proxyPass = "http://localhost:8084";
proxyWebsockets = true;
};
};
}; };
}; };
security.acme = { security.acme = {
@ -155,14 +150,15 @@ in {
defaults.email = "tristan@tristans.cloud"; defaults.email = "tristan@tristans.cloud";
}; };
sops.secrets."namecheap" = {};
services.ddclient = { services.ddclient = {
# enable = true; enable = true;
protocol = "duckdns"; protocol = "namecheap";
use = "if, if=enp4s0"; usev4 = "webv4, webv4=ipify-ipv4";
ssl = true; usev6 = "";
username = ""; username = "tristans.cloud";
passwordFile = "/home/tristan/duckdnstoken"; passwordFile = config.sops.secrets."namecheap".path;
domains = ["tlbean"]; domains = ["@" "*"];
}; };
services.mpd = { services.mpd = {
@ -172,4 +168,7 @@ in {
services.grafana.settings.server = { services.grafana.settings.server = {
http_port = 3001; # forgejo and grafana default to 3000 http_port = 3001; # forgejo and grafana default to 3000
}; };
systemd.services.NetworkManager-wait-online.enable = false;
} }

View file

@ -23,14 +23,17 @@ in {
options = ["subvol=@" "compress=zstd" "autodefrag"]; options = ["subvol=@" "compress=zstd" "autodefrag"];
}; };
boot.initrd.postDeviceCommands = pkgs.lib.mkBefore (decrypt { boot.initrd.luks.devices."usbkey" = {
keydevice = "/dev/disk/by-id/usb-Generic_Flash_Disk_BCC97785-0:0"; device = "/dev/disk/by-id/usb-Generic_Flash_Disk_BCC97785-0:0";
keypartname = "usbkey"; };
});
boot.initrd.luks.devices."cryptroot" = { boot.initrd.luks.devices."cryptroot" = {
device = "/dev/disk/by-uuid/570cc51f-bd5c-4bee-a18f-f6aabaf60881"; device = "/dev/disk/by-uuid/570cc51f-bd5c-4bee-a18f-f6aabaf60881";
keyFileSize = 4096; keyFileSize = 4096;
preOpenCommands = ''
mkdir -m 0755 -p /key
mount -n -t vfat -o ro /dev/mapper/usbkey /key
'';
keyFile = "/key/keyfile"; keyFile = "/key/keyfile";
preLVM = false; preLVM = false;
}; };
@ -54,6 +57,11 @@ in {
swapDevices = [{device = "/swap/swapfile";}]; swapDevices = [{device = "/swap/swapfile";}];
boot.plymouth.enable = true;
boot.initrd.verbose = false;
boot.consoleLogLevel = 1;
boot.kernelParams = ["quiet" "udev.log_level=3"];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # 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 # (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 # still possible to use this option, but it's recommended to use it in conjunction
@ -66,7 +74,7 @@ in {
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.opengl = { hardware.graphics = {
enable = true; enable = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
intel-media-driver # LIBVA_DRIVER_NAME=iHD intel-media-driver # LIBVA_DRIVER_NAME=iHD
@ -102,6 +110,4 @@ in {
}; };
} }
]; ];
services.tlp.enable = true;
} }

View file

@ -1,7 +1,7 @@
{config, ...}: let {config, ...}: let
user = config.user; user = config.user;
in { in {
hardware.opengl.enable = true; hardware.graphics.enable = true;
boot.kernelModules = ["kvm-amd" "qxl" "bochs_drm"]; boot.kernelModules = ["kvm-amd" "qxl" "bochs_drm"];
system.stateVersion = "24.05"; system.stateVersion = "24.05";

View file

@ -17,7 +17,6 @@ in {
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 = ["uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1"]; boot.initrd.kernelModules = ["uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1"];
boot.kernelModules = ["kvm-amd"]; boot.kernelModules = ["kvm-amd"];
boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
boot.extraModulePackages = []; boot.extraModulePackages = [];
fileSystems."/" = { fileSystems."/" = {
@ -26,6 +25,13 @@ in {
options = ["subvol=@" "compress=zstd" "autodefrag"]; options = ["subvol=@" "compress=zstd" "autodefrag"];
}; };
fileSystems."/nix" = {
device = "/dev/disk/by-label/nix";
fsType = "f2fs";
neededForBoot = true;
options = ["noatime"];
};
boot.initrd.postDeviceCommands = pkgs.lib.mkBefore (decrypt { boot.initrd.postDeviceCommands = pkgs.lib.mkBefore (decrypt {
keydevice = "/dev/disk/by-id/usb-Generic_Flash_Disk_BCC97785-0:0"; keydevice = "/dev/disk/by-id/usb-Generic_Flash_Disk_BCC97785-0:0";
keypartname = "usbkey"; keypartname = "usbkey";

View file

@ -10,6 +10,7 @@
./programs/git.nix ./programs/git.nix
./programs/lf/. ./programs/lf/.
./programs/zsh.nix ./programs/zsh.nix
./programs/tmux.nix
]; ];
programs.home-manager.enable = true; programs.home-manager.enable = true;
@ -34,12 +35,15 @@
htop htop
libsixel libsixel
yt-dlp yt-dlp
ytfzf fastfetch
neofetch
tree tree
ansible ansible
ytfzf
lazygit
]; ];
programs.zoxide.enable = true;
programs.rbw = { programs.rbw = {
enable = true; enable = true;
settings = { settings = {

View file

@ -0,0 +1,82 @@
{
pkgs,
config,
...
}: let
inherit (config.lib.cosmic) Actions;
in {
programs.cosmic = {
enable = true;
input.asDefaults = true;
input.binds = {
# Navigation
Super. "h" = Actions.Focus "Left";
Super. "l" = Actions.Focus "Right";
Super. "j" = Actions.Focus "Down";
Super. "k" = Actions.Focus "Up";
Super.Shift. "h" = Actions.Move "Left";
Super.Shift. "l" = Actions.Move "Right";
Super.Shift. "j" = Actions.Move "Down";
Super.Shift. "k" = Actions.Move "Up";
Super. "1" = Actions.Workspace 1;
Super. "2" = Actions.Workspace 2;
Super. "3" = Actions.Workspace 3;
Super. "4" = Actions.Workspace 4;
Super. "5" = Actions.Workspace 5;
Super.Shift. "1" = Actions.MoveToWorkspace 1;
Super.Shift. "2" = Actions.MoveToWorkspace 2;
Super.Shift. "3" = Actions.MoveToWorkspace 3;
Super.Shift. "4" = Actions.MoveToWorkspace 4;
Super.Shift. "5" = Actions.MoveToWorkspace 5;
Super. "Space" = Actions.ToggleWindowFloating;
Super. "f" = Actions.Maximize;
Super. "m" = Actions.Minimize;
Super.Shift. "x" = Actions.Close;
Super.Shift. "v" = Actions.ToggleStacking;
Super.Shift. "y" = Actions.ToggleSticky;
# System
Super. "d" = Actions.Spawn config.programs.menu.drunCommand;
Super. "Return" = Actions.Spawn pkgs.alacritty;
Super. "o" = Actions.System "HomeFolder";
Super.Shift. "s" = Actions.System "Screenshot";
};
background = {
displays = {
all = {
source = ../../../images/nier2.jpg;
};
};
};
panels = {
"Bar" = {
applets = {
start = [
"com.system76.CosmicAppletWorkspaces"
];
center = [];
end = [
"com.system76.CosmicAppletTime"
"com.system76.CosmicAppletTiling"
"com.system76.CosmicAppletAudio"
"com.system76.CosmicAppletNotifications"
"com.system76.CosmicAppletMinimize"
"com.system76.CosmicAppletPower"
];
};
options = {
size = "XS";
border_radius = 0;
};
};
};
settings = {
"com.system76.CosmicComp".options = {
autotile = true;
active_hint = true;
focus_follows_cursor = true;
focus_follows_cursor_delay = 0;
cursor_follows_focus = true;
};
};
};
}

View file

@ -6,24 +6,91 @@
}: let }: let
modifier = config.windowManager.modifierKey; modifier = config.windowManager.modifierKey;
menu = config.programs.menu.dmenuCommand; menu = config.programs.menu.dmenuCommand;
lock_cmd = "${config.programs.hyprlock.package}/bin/hyprlock";
color = {
inherit (config.lib.stylix.colors) yellow red;
bg = config.lib.stylix.colors.base00;
fg = config.lib.stylix.colors.base07;
text = config.lib.stylix.colors.base05;
};
rgb = color: "rgb(${color})";
in { in {
imports = [ imports = [
(import ../utils/swaylock.nix)
(import ../utils/swayidle.nix)
(import ../utils/waybar.nix) (import ../utils/waybar.nix)
(import ../utils/display.nix) (import ../utils/display.nix)
../../workstation.nix
]; ];
xdg.portal = { xdg.portal = {
enable = true; enable = true;
configPackages = [pkgs.hyprland]; configPackages = [pkgs.hyprland];
extraPortals = [pkgs.xdg-desktop-portal-hyprland pkgs.xdg-desktop-portal-gtk]; extraPortals = [pkgs.xdg-desktop-portal-gtk];
};
services.hypridle = {
enable = true;
settings = {
general = {
before_sleep_cmd = "rbw lock";
after_sleep_cmd = "hyprctl dispatch dpms on";
ignore_dbus_inhibit = false;
lock_cmd = "pidof ${lock_cmd} || ${lock_cmd}";
};
listener = [
{
timeout = 300;
on-timeout = "loginctl lock-session";
}
{
timeout = 1200;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
programs.hyprlock = {
enable = true;
settings = {
# https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/
general = {
hide_cursor = true;
grace = 10;
ignore_empty_input = true;
};
background = [
{
path = "screenshot";
blur_passes = 3;
blur_size = 8;
}
];
input-field = [
{
dots_center = true;
fade_on_empty = true;
outline_thickness = 5;
shadow_passes = 2;
inner_color = rgb color.bg;
outer_color = rgb color.fg;
font_color = rgb color.text;
fail_color = rgb color.red;
check_color = rgb color.yellow;
}
];
};
}; };
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
systemd.enable = true; systemd = {
enable = true;
variables = ["--all"];
};
settings = { settings = {
exec-once = ["${pkgs.swaybg}/bin/swaybg -i ${config.stylix.image} -m fill"];
input = { input = {
touchpad = { touchpad = {
natural_scroll = true; natural_scroll = true;
@ -35,7 +102,6 @@ in {
}; };
gestures = { gestures = {
workspace_swipe = true; workspace_swipe = true;
workspace_swipe_numbered = false;
}; };
decoration = { decoration = {
rounding = 0; rounding = 0;

View file

@ -15,7 +15,7 @@
timeouts = [ timeouts = [
{ {
timeout = 300; timeout = 300;
command = "${pkgs.swaylock-effects}/bin/swaylock -f"; command = "loginctl lock-session";
} }
{ {
timeout = 600; timeout = 600;

View file

@ -4,7 +4,7 @@
systemd.enable = true; systemd.enable = true;
settings = { settings = {
mainBar = { mainBar = {
layer = "top"; layer = "bottom";
position = "top"; position = "top";
height = 36; height = 36;
modules-right = ["mpris" "idle_inhibitor" "pulseaudio" "clock" "tray" "battery"]; modules-right = ["mpris" "idle_inhibitor" "pulseaudio" "clock" "tray" "battery"];

View file

@ -0,0 +1,185 @@
# Binds are of the form <key sequence> = <command to run>
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
<C-p> = :prev-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgDn> = :next-tab<Enter>
\[t = :prev-tab<Enter>
\]t = :next-tab<Enter>
<C-t> = :term<Enter>
? = :help keys<Enter>
<C-c> = :prompt 'Quit?' quit<Enter>
<C-q> = :prompt 'Quit?' quit<Enter>
<C-z> = :suspend<Enter>
[messages]
o = :term mbsync -a<Enter>
q = :prompt 'Quit?' quit<Enter>
j = :next<Enter>
<Down> = :next<Enter>
<C-d> = :next 50%<Enter>
<C-f> = :next 100%<Enter>
<PgDn> = :next 100%<Enter>
k = :prev<Enter>
<Up> = :prev<Enter>
<C-u> = :prev 50%<Enter>
<C-b> = :prev 100%<Enter>
<PgUp> = :prev 100%<Enter>
g = :select 0<Enter>
G = :select -1<Enter>
J = :next-folder<Enter>
<C-Down> = :next-folder<Enter>
K = :prev-folder<Enter>
<C-Up> = :prev-folder<Enter>
H = :collapse-folder<Enter>
<C-Left> = :collapse-folder<Enter>
L = :expand-folder<Enter>
<C-Right> = :expand-folder<Enter>
v = :mark -t<Enter>
<Space> = :mark -t<Enter>:next<Enter>
V = :mark -v<Enter>
T = :toggle-threads<Enter>
zc = :fold<Enter>
zo = :unfold<Enter>
za = :fold -t<Enter>
zM = :fold -a<Enter>
zR = :unfold -a<Enter>
<tab> = :fold -t<Enter>
zz = :align center<Enter>
zt = :align top<Enter>
zb = :align bottom<Enter>
<Enter> = :view<Enter>
d = :choose -o y 'Really delete this message' delete-message<Enter>
D = :delete<Enter>
a = :archive flat<Enter>
A = :unmark -a<Enter>:mark -T<Enter>:archive flat<Enter>
C = :compose<Enter>
m = :compose<Enter>
b = :bounce<space>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
c = :cf<space>
$ = :term<space>
! = :term<space>
| = :pipe<space>
/ = :search<space>
\ = :filter<space>
n = :next-result<Enter>
N = :prev-result<Enter>
<Esc> = :clear<Enter>
s = :split<Enter>
S = :vsplit<Enter>
pl = :patch list<Enter>
pa = :patch apply <Tab>
pd = :patch drop <Tab>
pb = :patch rebase<Enter>
pt = :patch term<Enter>
ps = :patch switch <Tab>
[messages:folder=Drafts]
<Enter> = :recall<Enter>
[view]
/ = :toggle-key-passthrough<Enter>/
q = :close<Enter>
O = :open<Enter>
o = :open<Enter>
S = :save<space>
| = :pipe<space>
D = :delete<Enter>
A = :archive flat<Enter>
<C-l> = :open-link <space>
f = :forward<Enter>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
H = :toggle-headers<Enter>
<C-k> = :prev-part<Enter>
<C-Up> = :prev-part<Enter>
<C-j> = :next-part<Enter>
<C-Down> = :next-part<Enter>
J = :next<Enter>
<C-Right> = :next<Enter>
K = :prev<Enter>
<C-Left> = :prev<Enter>
[view::passthrough]
$noinherit = true
$ex = <C-x>
<Esc> = :toggle-key-passthrough<Enter>
[compose]
# Keybindings used when the embedded terminal is not selected in the compose
# view
$noinherit = true
$ex = <C-x>
$complete = <C-o>
<C-k> = :prev-field<Enter>
<C-Up> = :prev-field<Enter>
<C-j> = :next-field<Enter>
<C-Down> = :next-field<Enter>
<A-p> = :switch-account -p<Enter>
<C-Left> = :switch-account -p<Enter>
<A-n> = :switch-account -n<Enter>
<C-Right> = :switch-account -n<Enter>
<tab> = :next-field<Enter>
<backtab> = :prev-field<Enter>
<C-p> = :prev-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgDn> = :next-tab<Enter>
[compose::editor]
# Keybindings used when the embedded terminal is selected in the compose view
$noinherit = true
$ex = <C-x>
<C-k> = :prev-field<Enter>
<C-Up> = :prev-field<Enter>
<C-j> = :next-field<Enter>
<C-Down> = :next-field<Enter>
<C-p> = :prev-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgDn> = :next-tab<Enter>
[compose::review]
# Keybindings used when reviewing a message to be sent
# Inline comments are used as descriptions on the review screen
y = :send<Enter> # Send
n = :abort<Enter> # Abort (discard message, no confirmation)
v = :preview<Enter> # Preview message
p = :postpone<Enter> # Postpone
q = :choose -o d discard abort -o p postpone postpone<Enter> # Abort or postpone
e = :edit<Enter> # Edit
a = :attach<space> # Add attachment
d = :detach<space> # Remove attachment
[terminal]
$noinherit = true
$ex = <C-x>
<C-p> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-PgUp> = :prev-tab<Enter>
<C-PgDn> = :next-tab<Enter>

View file

@ -0,0 +1,21 @@
{
programs.aerc = {
extraBinds = builtins.readFile ./binds.conf; # default binds
extraConfig = {
general = {
pgp-provider = "gpg";
unsafe-accounts-conf = true;
};
ui = {};
viewer = {};
filters = {
"text/plain" = "colorize";
"text/calendar" = "calendar";
"message/delivery-status" = "colorize";
"message/rfc822" = "colorize";
"image/*" = "img2sixel";
"text/html" = "html | colorize";
};
};
};
}

View file

@ -21,6 +21,8 @@ in {
}; };
}; };
imports = [./aerc/.];
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
programs.scripts = [ programs.scripts = [
{ {
@ -73,156 +75,6 @@ in {
programs.aerc = { programs.aerc = {
enable = cfg.terminal; enable = cfg.terminal;
extraBinds = ''
# Binds are of the form <key sequence> = <command to run>
# To use '=' in a key sequence, substitute it with "Eq": "<Ctrl+Eq>"
# If you wish to bind #, you can wrap the key sequence in quotes: "#" = quit
<C-p> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
<C-t> = :term<Enter>
[messages]
Q = :quit<Enter>
T = :toggle-threads<Enter>
j = :next<Enter>
<Down> = :next<Enter>
<C-d> = :next 50%<Enter>
<C-f> = :next 100%<Enter>
<PgDn> = :next -s 100%<Enter>
k = :prev<Enter>
<Up> = :prev<Enter>
<C-u> = :prev 50%<Enter>
<C-b> = :prev<Enter>
<PgUp> = :prev -s 100%<Enter>
gg = :select 0<Enter>
G = :select -1<Enter>
J = :next-folder<Enter>
K = :prev-folder<Enter>
v = :mark -t<Enter>
V = :mark -v<Enter>
f = :flag<Enter>
F = :unflag<Enter>
t = :toggle-threads<Enter>
<Enter> = :view<Enter>
D = :mv Trash<Enter>
C = :compose<enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
rt = :unflag<Enter>:reply -a -Tthanks<Enter>
Rt = :unflag<Enter>:reply -qa -Tquoted_thanks<Enter>
a = :mv Archive<Enter>
c = :cf<space>
$ = :term<space>
! = :term<space>
| = :pipe<space>
ga = :flag<Enter>:pipe -mb git am -3<Enter>
gp = :term git push<Enter>
gl = :term git log<Enter>
/ = :search<space>
\ = :filter<space>
n = :next-result<Enter>
N = :prev-result<Enter>
o = :term mbsync -a<Enter>
q = :quit<Enter>
[view]
/ = :toggle-key-passthrough<Enter>/
q = :close<Enter>
| = :pipe -m<space>
S = :save<space>
H = :toggle-headers<Enter>
D = :mv Trash<Enter>
<C-k> = :prev-part<Enter>
<C-j> = :next-part<Enter>
J = :next<Enter>
K = :prev<Enter>
f = :forward<Enter>
Rr = :reply<Enter>
Rq = :reply -q<Enter>
rr = :reply -a<Enter>
rq = :reply -aq<Enter>
rt = :reply -Tthanks<Enter>
ga = :pipe -b git am -3<Enter>
gp = :term git push<Enter>
gl = :term git log<Enter>
[view::passthrough]
$noinherit = true
$ex = <C-x>
<Esc> = :toggle-key-passthrough<Enter>
[compose]
$ex = <C-x>
<C-k> = :prev-field<Enter>
<C-j> = :next-field<Enter>
<tab> = :next-field<Enter>
[compose::editor]
# Keybindings used when the embedded terminal is selected in the compose view
$noinherit = true
$ex = <C-x>
<C-t> = :term<Enter>
<C-k> = :prev-field<Enter>
<C-j> = :next-field<Enter>
<C-p> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
[compose::review]
# Keybindings used when reviewing a message to be sent
y = :send<Enter>
n = :abort<Enter>
e = :edit<Enter>
a = :attach<space>
c = :encrypt<Enter>
s = :sign<Enter>
V = :header -f X-Sourcehut-Patchset-Update NEEDS_REVISION<Enter>
A = :header -f X-Sourcehut-Patchset-Update APPLIED<Enter>
R = :header -f X-Sourcehut-Patchset-Update REJECTED<Enter>
[terminal]
$noinherit = true
$ex = <C-x>
<C-t> = :term<Enter>
<C-p> = :prev-tab<Enter>
<C-n> = :next-tab<Enter>
'';
extraConfig = {
general = {
pgp-provider = "gpg";
unsafe-accounts-conf = true;
};
ui = {};
viewer = {};
filters = {
"text/plain" = "colorize";
"text/calendar" = "calendar";
"message/delivery-status" = "colorize";
"message/rfc822" = "colorize";
"image/*" = "img2sixel";
"text/html" = "html | colorize";
};
};
}; };
}; };
} }

View file

@ -8,8 +8,9 @@
terminal = config.programs.terminal; terminal = config.programs.terminal;
termcmd = "${terminal}/bin/${terminal.pname}"; termcmd = "${terminal}/bin/${terminal.pname}";
menucmd = config.programs.menu.drunCommand; menucmd = config.programs.menu.drunCommand;
inherit (lib) mkPackageOption mkOption;
in { in {
options.programs = with lib; { options.programs = {
menu = { menu = {
package = mkPackageOption pkgs "wofi" { package = mkPackageOption pkgs "wofi" {
example = "pkgs.dmenu-wayland"; example = "pkgs.dmenu-wayland";

View file

@ -1,4 +1,4 @@
{ {pkgs, ...}: {
programs.git = { programs.git = {
enable = true; enable = true;
aliases = { aliases = {
@ -6,6 +6,32 @@
amend = "commit --amend --no-edit"; amend = "commit --amend --no-edit";
sdiff = "diff --staged"; sdiff = "diff --staged";
t = "tag --annotate"; t = "tag --annotate";
bclone = "!sh ${pkgs.writeShellScriptBin "bare-clone" ''
url=$1
basename=''${url##*/}
if [[ $2 == -* ]]
then
opts=''${@:2}
name=''${basename%.*}
else
opts=''${@:3}
name=''${2:-''${basename%.*}}
fi
mkdir "$name"
git clone --bare "$url" "$name/.bare" $opts || {
rm -r "$name"
exit 1
}
cd "$name"
echo "gitdir: ./.bare" > .git
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin $opts
''}/bin/bare-clone";
}; };
delta = { delta = {
enable = true; enable = true;

View file

@ -1,10 +1,5 @@
{ {pkgs, ...}: {
pkgs,
lib,
...
}: {
imports = [ imports = [
./qutebrowser.nix
./pcmanfm.nix ./pcmanfm.nix
./mpv.nix ./mpv.nix
./vscode.nix ./vscode.nix
@ -18,13 +13,11 @@
helvum helvum
# tools # tools
obs-studio
inkscape inkscape
libsForQt5.okular libsForQt5.okular
gimp gimp
libreoffice libreoffice
dbeaver dbeaver-bin
insomnia
drawio drawio
# entertainment # entertainment
@ -32,13 +25,16 @@
shortwave shortwave
# other # other
element-desktop element-desktop-wayland
brave brave
vieb
bitwarden bitwarden
logseq
]; ];
programs.obs-studio = {
enable = true;
plugins = [pkgs.obs-studio-plugins.wlrobs];
};
xdg.mimeApps.defaultApplications = { xdg.mimeApps.defaultApplications = {
"application/pdf" = "sioyek.desktop"; "application/pdf" = "sioyek.desktop";
}; };
@ -48,21 +44,10 @@
gtk = { gtk = {
enable = true; enable = true;
iconTheme = {
name = "Vimix-Doder";
package = pkgs.vimix-icon-theme;
};
cursorTheme = {
name = "Vanilla-DMZ";
package = pkgs.vanilla-dmz;
size = 24;
};
gtk3.bookmarks = [ gtk3.bookmarks = [
"file:///home/tristan/Documents" "file:///home/tristan/Documents"
"file:///home/tristan/Pictures/Screenshots" "file:///home/tristan/Pictures/Screenshots"
"file:///home/tristan/Downloads" "file:///home/tristan/Downloads"
]; ];
}; };
programs.librewolf.enable = true;
} }

View file

@ -37,6 +37,7 @@ in {
R = "drag"; R = "drag";
"<f-2>" = ":rename"; "<f-2>" = ":rename";
"<enter>" = "open-with"; "<enter>" = "open-with";
"<f-5>" = ":reload";
}; };
programs.lf.extraConfig = '' programs.lf.extraConfig = ''
set sixel true set sixel true

View file

@ -1,30 +0,0 @@
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
vim.o.relativenumber = true
vim.o.number = true
vim.o.signcolumn = 'yes'
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.smartindent = true
vim.o.scrolloff = 4
vim.o.undofile = true
vim.o.undodir = vim.fn.expand("$HOME/.local/share/nvim/undo")
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
vim.keymap.set("x", "p", "\"_dP")
vim.keymap.set("n", "<leader>y", "\"+y")
vim.keymap.set("v", "<leader>y", "\"+y")
-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist)
vim.keymap.set('v', '<C-c>', '"+y')
vim.keymap.set('i', '<C-v>', '<escape>"+p')

View file

@ -1,61 +1,20 @@
{pkgs, ...}: { {
programs.neovim = { config,
enable = true; pkgs,
defaultEditor = true; lib,
extraLuaConfig = '' ...
${builtins.readFile ./config.lua} }: {
''; programs.nixvim =
extraPackages = with pkgs; [ {
nodePackages_latest.typescript-language-server enable = true;
vscode-langservers-extracted }
gopls // (import ../../../lib/nixvim.nix {inherit pkgs;});
nil
rust-analyzer
];
plugins = with pkgs.vimPlugins; [
{
plugin = nvim-surround;
type = "lua";
config = ''
require("nvim-surround").setup()
'';
}
{
plugin = comment-nvim;
type = "lua";
config = ''
require("Comment").setup()
'';
}
{
plugin = vimwiki;
config = ''
let g:vimwiki_list = [{'path': '~/Documents/vimwiki/', 'syntax': 'markdown', 'ext': '.md'}]
'';
}
{
plugin = telescope-nvim;
type = "lua";
config = ''
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
'';
}
{
plugin = nvim-lspconfig;
type = "lua";
config = builtins.readFile ./lspconfig.lua;
}
];
};
programs.vscode = { programs.vscode = {
extensions = [pkgs.vscode-extensions.asvetliakov.vscode-neovim]; extensions = [pkgs.vscode-extensions.asvetliakov.vscode-neovim];
userSettings = { userSettings = {
"vscode-neovim.neovimExecutablePaths.linux" = "${pkgs.neovim}/bin/nvim"; "vscode-neovim.neovimExecutablePaths.linux" =
lib.getExe config.programs.nixvim.package;
"extensions.experimental.affinity" = { "extensions.experimental.affinity" = {
"asvetliakov.vscode-neovim" = 1; "asvetliakov.vscode-neovim" = 1;
}; };

View file

@ -1,54 +0,0 @@
-- Setup language servers.
local lspconfig = require('lspconfig')
local on_attach = function(client)
require'completion'.on_attach(client)
client.server_capabilities.documentFormattingProvider = false
end
lspconfig.tsserver.setup {
on_attach = on_attach
}
lspconfig.eslint.setup {
on_attach = on_attach
}
lspconfig.rust_analyzer.setup {
on_attach = on_attach
}
lspconfig.gopls.setup {}
lspconfig.nil_ls.setup {}
lspconfig.rust_analyzer.setup {}
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<leader>wa', vim.lsp.buf.add_workspace_folder, opts)
vim.keymap.set('n', '<leader>wr', vim.lsp.buf.remove_workspace_folder, opts)
vim.keymap.set('n', '<leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, opts)
vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<leader>f', function()
vim.lsp.buf.format { async = true }
end, opts)
end,
})

View file

@ -14,20 +14,38 @@
services.nextcloud-client.enable = true; services.nextcloud-client.enable = true;
programs.nixvim.plugins = {
lsp = {
servers.gdscript.enable = true;
};
godot.enable = true;
dap = {
enable = true;
adapters.servers.godot = {
host = "127.0.0.1";
port = 6006;
};
configurations.gdscript = [
{
type = "godot";
request = "launch";
name = "Launch scene";
project = "\${workspaceFolder}";
}
];
};
};
home.packages = with pkgs; [ home.packages = with pkgs; [
godot_4 godot_4
ardour ardour
blender blender
# musescore musescore
monero-gui monero-gui
electrum
xmrig
transmission-remote-gtk transmission-remote-gtk
krita krita
organicmaps organicmaps
anki anki
hugo
libsForQt5.neochat
bookworm bookworm
jellyfin-mpv-shim jellyfin-mpv-shim
]; ];

View file

@ -12,7 +12,6 @@
grim = "${pkgs.grim}/bin/grim"; grim = "${pkgs.grim}/bin/grim";
slurp = "${pkgs.slurp}/bin/slurp"; slurp = "${pkgs.slurp}/bin/slurp";
amixer = "${pkgs.alsa-utils}/bin/amixer"; amixer = "${pkgs.alsa-utils}/bin/amixer";
swaybg = "${pkgs.swaybg}/bin/swaybg";
chafa = "${pkgs.chafa}/bin/chafa"; chafa = "${pkgs.chafa}/bin/chafa";
exiftool = "${pkgs.exiftool}/bin/exiftool"; exiftool = "${pkgs.exiftool}/bin/exiftool";
wc = "${pkgs.coreutils}/bin/wc"; wc = "${pkgs.coreutils}/bin/wc";
@ -25,6 +24,7 @@
gawk = "${pkgs.gawk}/bin/awk"; gawk = "${pkgs.gawk}/bin/awk";
hyprpicker = "${pkgs.hyprpicker}/bin/hyprpicker"; hyprpicker = "${pkgs.hyprpicker}/bin/hyprpicker";
sed = "${pkgs.gnused}/bin/sed"; sed = "${pkgs.gnused}/bin/sed";
lock = "${pkgs.hyprlock}/bin/hyprlock";
}; };
in { in {
programs.scripts = [ programs.scripts = [
@ -55,14 +55,13 @@ in {
echo "$items" | ${my-deps.menu} | xargs -I_ rbw get _ | wl-copy -n echo "$items" | ${my-deps.menu} | xargs -I_ rbw get _ | wl-copy -n
''; '';
hotkeys = [{key = "P";}]; hotkeys = [{key = "P";}];
install = false;
} }
{ {
name = "bwusernamemenu"; name = "bwusernamemenu";
text = '' text = ''
items="$(rbw list)" items="$(rbw list)"
echo "$items" | ${my-deps.menu} | xargs -I_ rbw get --field username _ \ echo "$items" | ${my-deps.menu} | xargs -I_ rbw get --field username _ \
| awk '{print $2}' | wl-copy -n | wl-copy -n
''; '';
hotkeys = [ hotkeys = [
{ {
@ -70,7 +69,6 @@ in {
key = "P"; key = "P";
} }
]; ];
install = false;
} }
{ {
name = "bwotpmenu"; name = "bwotpmenu";
@ -84,7 +82,6 @@ in {
key = "P"; key = "P";
} }
]; ];
install = false;
} }
{ {
name = "screenshot"; name = "screenshot";
@ -279,7 +276,7 @@ in {
sleep sleep
hibernate" | ${my-deps.menu}) hibernate" | ${my-deps.menu})
case $res in case $res in
lock) swaylock;; lock) ${my-deps.lock};;
sleep) systemctl suspend;; sleep) systemctl suspend;;
hibernate) systemctl hibernate;; hibernate) systemctl hibernate;;
esac esac
@ -344,5 +341,12 @@ in {
} }
]; ];
} }
{
name = "prefetch-url";
text = ''
nix-build -E "with import <nixpkgs> {}; fetchzip {url = \"$1\"; sha256 = lib.fakeSha256; }"
'';
install = true;
}
]; ];
} }

43
home/programs/tmux.nix Normal file
View file

@ -0,0 +1,43 @@
{
programs.tmux = {
enable = true;
baseIndex = 1;
escapeTime = 0;
keyMode = "vi";
mouse = true;
terminal = "screen-256color";
historyLimit = 5000;
extraConfig = ''
bind -n M-s split-window -v
bind -n M-v split-window -h
bind -n M-Enter split-window -h
bind -n M-h select-pane -L
bind -n M-j select-pane -D
bind -n M-k select-pane -U
bind -n M-l select-pane -R
bind -n M-q kill-pane
bind -n M-< resize-pane -L 10
bind -n M-> resize-pane -R 10
bind -n M-- resize-pane -D 10
bind -n M-+ resize-pane -U 10
bind -n M-z resize-pane -Z
bind -n M-u copy-mode
bind -n M-p paste-buffer
bind -n M-n next-window
set-option -g renumber-windows on
'';
};
# programs.kitty = {
# enable = true;
# keybindings = {
# "alt+h" = "neighboring_window left";
# "alt+l" = "neighboring_window right";
# "alt+j" = "neighboring_window down";
# "alt+k" = "neighboring_window up";
# "alt+enter" = "new_window";
# };
# shellIntegration.enableZshIntegration = true;
# };
}

View file

@ -19,6 +19,9 @@ in {
"gitlens.telemetry.enabled" = false; "gitlens.telemetry.enabled" = false;
"redhat.telemetry.enabled" = false; "redhat.telemetry.enabled" = false;
"cSpell.language" = "en,en-GB"; "cSpell.language" = "en,en-GB";
"[typescript]" = {
"editor.defaultFormatter" = "vscode.typescript-language-features";
};
}; };
}; };

View file

@ -4,6 +4,7 @@
... ...
}: let }: let
modifier = config.windowManager.modifierKey; modifier = config.windowManager.modifierKey;
browser = "${pkgs.brave}/opt/brave.com/brave/brave-browser";
pwa = { pwa = {
slack = "mpagibdhafmlkgpemeicgogjnhclenoc"; slack = "mpagibdhafmlkgpemeicgogjnhclenoc";
teams = "cifhbcnohmdccbgoicgdjpfamggdegmo"; teams = "cifhbcnohmdccbgoicgdjpfamggdegmo";
@ -15,23 +16,39 @@ in {
terminal = false; terminal = false;
}; };
home.packages = with pkgs; [ home.packages = [
thunderbird pkgs.thunderbird
remmina pkgs.remmina
(import ../../lib/mkapp.nix "slack" { (import ../../lib/mkapp.nix "slack" {
inherit pkgs; inherit pkgs browser;
desktopName = "Slack"; desktopName = "Slack";
app-id = pwa.slack; app-id = pwa.slack;
browser = "${brave}/opt/brave.com/brave/brave-browser";
}) })
(import ../../lib/mkapp.nix "teams" { (import ../../lib/mkapp.nix "teams" {
inherit pkgs; inherit pkgs browser;
browser = "${brave}/opt/brave.com/brave/brave-browser";
app-id = pwa.teams; app-id = pwa.teams;
desktopName = "Microsoft Teams"; desktopName = "Microsoft Teams";
}) })
pkgs.devcontainer
(pkgs.writeShellScriptBin "devcontainer-open" (let
jq = "${pkgs.jq}/bin/jq";
devcontainer = "${pkgs.devcontainer}/bin/devcontainer";
in ''
res=$(${devcontainer} up --workspace-folder .)
outcome=$(echo $res | ${jq} -r '.outcome')
[[ $outcome = "success" ]] || exit 1
containerId=$(echo $res | ${jq} -r '.containerId')
remoteWorkspaceFolder=$(echo $res | ${jq} -r '.remoteWorkspaceFolder')
docker exec -it --workdir=$remoteWorkspaceFolder $containerId bash
''))
]; ];
home.sessionVariables = {
CYPRESS_INSTALL_BINARY = 0;
CYPRESS_RUN_BINARY = "${pkgs.cypress}/bin/Cypress";
MONGOMS_SYSTEM_BINARY = "${pkgs.callPackage ../../pkgs/mongodb.nix pkgs}/bin/mongod";
};
gtk.gtk3.bookmarks = [ gtk.gtk3.bookmarks = [
"file:///home/tristan/OneDrive/ OneDrive" "file:///home/tristan/OneDrive/ OneDrive"
]; ];

View file

@ -8,7 +8,6 @@
./modules/terminal.nix ./modules/terminal.nix
./modules/scripts.nix ./modules/scripts.nix
./modules/email.nix ./modules/email.nix
./modules/mpd.nix
./modules/menu.nix ./modules/menu.nix
./modules/scripts.nix ./modules/scripts.nix
@ -23,7 +22,6 @@
dmenuCommand = "${pkgs.tofi}/bin/tofi --fuzzy-match true"; dmenuCommand = "${pkgs.tofi}/bin/tofi --fuzzy-match true";
drunCommand = "${pkgs.tofi}/bin/tofi-drun --drun-launch true"; drunCommand = "${pkgs.tofi}/bin/tofi-drun --drun-launch true";
}; };
roles.mpd.enable = true;
home.packages = with pkgs; [ home.packages = with pkgs; [
wl-clipboard wl-clipboard
@ -38,8 +36,7 @@
programs.rbw.settings.pinentry = pkgs.pinentry-gnome3; programs.rbw.settings.pinentry = pkgs.pinentry-gnome3;
home.file.".icons/default".source = "${pkgs.vanilla-dmz}/share/icons/Vanilla-DMZ"; xdg.configFile."pipewire/pipewire.conf.d/raop-discover.conf".text = ''
home.file.".config/pipewire/pipewire.conf.d/raop-discover.conf".text = ''
context.modules = [ context.modules = [
{ {
name = libpipewire-module-raop-discover name = libpipewire-module-raop-discover

14
lib/cypress.nix Normal file
View file

@ -0,0 +1,14 @@
final: prev: {
cypress = prev.cypress.overrideAttrs (oldAttrs: rec {
pname = "cypress";
version = "13.13.0";
src = prev.fetchzip {
url = "https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip";
sha256 = "sha256-FGaopXp8T0swY0v6IH7cuhp/IolTmJ8vXLLslPtBOJw=";
## Note: sha256 is computed via (note the version):
##
## nix-prefetch-url --unpack https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip
};
});
}

View file

@ -1188,3 +1188,4 @@
8⃣ keycap: 8 ~ Symbols (keycap) 8⃣ keycap: 8 ~ Symbols (keycap)
9⃣ keycap: 9 ~ Symbols (keycap) 9⃣ keycap: 9 ~ Symbols (keycap)
¯\_(ツ)_/¯ shrug ¯\_(ツ)_/¯ shrug
• bullet point

View file

@ -4,8 +4,11 @@
user, user,
userFullname, userFullname,
... ...
}: modules: home-modules: let }: {
inherit (inputs) home-manager nixpkgs sops-nix; nixos-modules ? [],
home-modules ? [],
}: let
inherit (inputs) home-manager nixpkgs sops-nix nixvim;
in in
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs;}; specialArgs = {inherit inputs;};
@ -13,7 +16,7 @@ in
inherit system; inherit system;
modules = modules =
modules nixos-modules
++ [ ++ [
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
sops-nix.nixosModules.sops sops-nix.nixosModules.sops
@ -24,6 +27,7 @@ in
users.${user}.imports = users.${user}.imports =
home-modules home-modules
++ [ ++ [
nixvim.homeManagerModules.nixvim
../home/. ../home/.
{ {
options.home.userFullname = nixpkgs.lib.mkOption {default = userFullname;}; options.home.userFullname = nixpkgs.lib.mkOption {default = userFullname;};

279
lib/nixvim.nix Normal file
View file

@ -0,0 +1,279 @@
{pkgs, ...}: {
globals = {
mapleader = " ";
};
opts = {
number = true;
relativenumber = true;
tabstop = 4;
shiftwidth = 2;
expandtab = true;
smartindent = true;
scrolloff = 4;
undofile = true;
undodir.__raw = ''vim.fn.expand("$HOME/.local/share/nvim/undo")'';
list = true;
listchars = builtins.concatStringsSep "," [
"tab: >"
"leadmultispace: |"
"trail:."
"extends:>"
"precedes:<"
];
};
extraPlugins = [(pkgs.vimPlugins.actions-preview-nvim)];
extraConfigLua = ''
require("actions-preview").setup {
highlight_command = {
require("actions-preview.highlight").delta("${pkgs.delta}/bin/delta --no-gitconfig --side-by-side"),
},
telescope = {
sorting_strategy = "ascending",
layout_strategy = "vertical",
layout_config = {
width = 0.8,
height = 0.9,
prompt_position = "top",
preview_cutoff = 20,
preview_height = function(_, _, max_lines)
return max_lines - 10
end,
},
},
}
vim.keymap.set({ "v", "n" }, "<C-.>", require("actions-preview").code_actions)
vim.keymap.set({ "n" }, "<leader>ca", require("actions-preview").code_actions)
'';
keymaps = [
{
key = "<C-c>";
action = ''"+y'';
options.desc = "copy to clipboard";
}
{
key = "<leader>ca";
action = ''
require("actions-preview").code_actions
'';
}
{
key = "<C-Tab>";
action = "<CMD>tabnext<CR>";
}
{
key = "<C-S-Tab>";
action = "<CMD>tabprev<CR>";
}
{
key = "gl";
action = "g$";
}
{
key = "gh";
action = "g0";
}
{
mode = "v";
key = ">";
action = ">gv";
options.desc = "indent";
options.silent = true;
}
{
mode = "v";
key = "<";
action = "<gv";
options.desc = "deindent";
options.silent = true;
}
{
key = "<leader>q";
action = "<CMD>bd<CR>";
options.desc = "close buffer";
}
{
key = "<leader>g";
action = "";
options.desc = "Gitsigns";
}
{
key = "<leader>gs";
action = "<CMD>Gitsigns stage_hunk<CR>";
options.desc = "git stage hunk";
}
{
key = "<leader>gn";
action = "<CMD>Gitsigns next_hunk<CR>zz";
options.desc = "next git hunk";
}
{
key = "<leader>gd";
action = "<CMD>Gitsigns preview_hunk_inline<CR>";
options.desc = "git diff hunk";
}
{
key = "<leader>gD";
action = "<CMD>Gitsigns diffthis<CR>";
options.desc = "git diff buffer";
}
{
key = "<leader>gr";
action = "<CMD>Gitsigns reset_hunk<CR>";
options.desc = "git restore hunk";
}
{
key = "<leader>gb";
action = "<CMD>Gitsigns blame<CR>";
options.desc = "show git blame";
}
{
key = "<leader>gg";
action = "<CMD>LazyGit<CR>";
options.desc = "open lazygit";
}
{
key = "<leader>-";
action = "<CMD>Oil<CR>";
options.desc = "open dir in Oil";
}
{
key = "<leader>f";
action = "";
options.desc = "Telescope";
}
{
key = "<leader>c";
action = "";
options.desc = "LSP";
}
{
key = "<leader>h";
action = "";
options.desc = "Harpoon";
}
];
plugins = {
bufferline.enable = true;
web-devicons.enable = true;
vim-surround.enable = true;
comment.enable = true;
markdown-preview.enable = true;
telescope = {
enable = true;
settings = {
defaults = {
file_ignore_patterns = [".*lock.*"];
};
};
keymaps = {
"<leader>fg" = "live_grep";
"<leader>/" = "live_grep";
"<leader>ff" = "find_files";
"<leader>fb" = "buffers";
"<leader>fh" = "help_tags";
"<leader>:" = "commands";
"<leader>ft" = "treesitter";
"<leader>fr" = "lsp_references";
"<leader>cr" = "lsp_definition";
};
};
lsp = {
enable = true;
servers = {
ts-ls.enable = true;
nil-ls.enable = true;
gopls.enable = true;
};
keymaps = {
lspBuf = {
"<leader>ck" = "hover";
"K" = "hover";
"<leader>cr" = "rename";
"<F2>" = "rename";
};
};
};
cmp = {
enable = true;
settings = {
mapping = {
"<C-Space>" = "cmp.mapping.complete()";
"<C-u>" = "cmp.mapping.scroll_docs(4)";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-e>" = "cmp.mapping.close()";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<C-p>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<C-n>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
};
sources = [
{name = "nvim_lsp";}
{name = "path";}
{name = "buffer";}
];
};
};
cmp-nvim-lsp.enable = true;
cmp-nvim-lsp-signature-help.enable = true;
cmp-path.enable = true;
cmp-buffer.enable = true;
trouble.enable = true;
gitsigns.enable = true;
git-worktree = {
enable = true;
enableTelescope = true;
};
lazygit.enable = true;
which-key.enable = true;
harpoon = {
enable = true;
keymaps = {
addFile = "<leader>ha";
toggleQuickMenu = "<leader>hf";
navNext = "<leader>n";
};
};
vim-css-color.enable = true;
treesitter = {
enable = true;
folding = true;
};
treesitter-textobjects = {
enable = true;
select = {
enable = true;
lookahead = true;
keymaps = {
"af" = {
query = "@function.outer";
desc = "Function Outer";
};
"ac" = {
query = "@comment.outer";
desc = "Comment Outer";
};
"if" = {
query = "@function.inner";
desc = "Function Inner";
};
};
};
};
oil.enable = true;
ts-autotag.enable = true;
guess-indent.enable = true;
};
}

View file

@ -8,6 +8,7 @@
}: let }: let
user = config.user; user = config.user;
in { in {
nix = { nix = {
settings = { settings = {
experimental-features = ["nix-command" "flakes"]; experimental-features = ["nix-command" "flakes"];
@ -94,31 +95,6 @@ in {
sops sops
]; ];
programs.tmux.enable = true;
programs.tmux.extraConfig = ''
set escape-time 0
set -g default-terminal screen
bind -n M-s split-window -v
bind -n M-v split-window -h
bind -n M-Enter split-window -h
bind -n M-h select-pane -L
bind -n M-j select-pane -D
bind -n M-k select-pane -U
bind -n M-l select-pane -R
bind -n M-q kill-pane
bind -n M-< resize-pane -L 10
bind -n M-> resize-pane -R 10
bind -n M-- resize-pane -D 10
bind -n M-+ resize-pane -U 10
bind -n M-u copy-mode
bind -n M-p paste-buffer
set-window-option -g mode-keys vi
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection
'';
boot.kernel.sysctl = { boot.kernel.sysctl = {
"net.ipv4.ip_unprivileged_port_start" = 53; "net.ipv4.ip_unprivileged_port_start" = 53;
}; };

View file

@ -13,12 +13,21 @@ in {
"steam-run" "steam-run"
]; ];
nixpkgs.config.permittedInsecurePackages = [
"openssl-1.1.1w" # required for mongodb
];
networking = { networking = {
networkmanager = { networkmanager = {
plugins = [pkgs.networkmanager-openvpn]; plugins = [pkgs.networkmanager-openvpn];
}; };
}; };
# breaks some work projects ):<
networking.stevenblack.enable = false;
nixpkgs.overlays = [(import ../../lib/cypress.nix)];
services.onedrive.enable = true; services.onedrive.enable = true;
users.users.${user}.extraGroups = ["docker"]; users.users.${user}.extraGroups = ["docker"];

20
nixos/programs/cosmic.nix Normal file
View file

@ -0,0 +1,20 @@
{
inputs,
config,
...
}: {
imports = [
inputs.nixos-cosmic.nixosModules.default
];
nix.settings = {
substituters = ["https://cosmic.cachix.org/"];
trusted-public-keys = ["cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE="];
};
services.desktopManager.cosmic.enable = true;
services.displayManager.cosmic-greeter.enable = true;
services.system76-scheduler.enable = true;
home-manager.users.${config.user}.imports = [
(import "${inputs.home-manager-cosmic}/modules/programs/cosmic/.")
../../home/desktop/cosmic/.
];
}

View file

@ -1,4 +1,8 @@
{lib, ...}: { {
lib,
pkgs,
...
}: {
nixpkgs.config.allowUnfreePredicate = pkg: nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [ builtins.elem (lib.getName pkg) [
"steam" "steam"
@ -6,9 +10,12 @@
"steam-original" "steam-original"
"osu-lazer" "osu-lazer"
]; ];
programs.steam = { programs.steam = {
enable = true; enable = true;
extest.enable = true;
extraCompatPackages = with pkgs; [
proton-ge-bin
];
remotePlay.openFirewall = true; remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true; dedicatedServer.openFirewall = true;
}; };

View file

@ -0,0 +1,13 @@
{config, ...}: {
programs.hyprland.enable = true;
security.pam.services.hyprlock = {};
imports = [
./pipewire.nix
../workstation.nix
];
home-manager.users.${config.user}.imports = [
../../home/desktop/hyprland/.
];
}

View file

@ -0,0 +1,14 @@
{
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
raopOpenFirewall = true;
};
# network streaming
networking.firewall.allowedTCPPorts = [4713];
}

70
nixos/services/arr.nix Normal file
View file

@ -0,0 +1,70 @@
{config, lib, ...}: let
inherit (config) sops;
inherit (sops) templates placeholder;
in {
users.groups.media = {};
services.jackett = {
enable = true;
};
services.lidarr = {
enable = true;
group = "media";
};
services.sonarr = {
enable = true;
group = "media";
};
services.radarr = {
enable = true;
group = "media";
};
services.jellyseerr.enable = true;
sops.secrets.sonarr-sslkey = {
sopsFile = ../../certs/alpine.prawn-justice.ts.net.key;
format = "binary";
owner = "nginx";
};
# this was fun to figure out, but pointless atm.
services.nginx.virtualHosts."alpine.prawn-justice.ts.net" = {
forceSSL = true;
sslCertificateKey = config.sops.secrets.sonarr-sslkey.path;
sslCertificate = ../../certs/alpine.prawn-justice.ts.net.crt;
};
# probably easier if i just put this in a nixos-container
virtualisation.oci-containers.containers.transmission = {
autoStart = false;
image = "docker.io/haugene/transmission-openvpn:5.3.1";
ports = ["9091:9091"];
volumes = [
"/mnt/storage/downloads:/data"
"transmission-config:/config"
"/mnt/storage/media/unsorted:/data/completed"
];
environmentFiles = [ templates."transmission/env".path ];
environment = {
PUID = "1000";
GUID = "1000";
SUBNET = "100.0.0.0/8";
};
extraOptions = builtins.map (cap: "--cap-add=${cap}") [
"NET_ADMIN"
"NET_RAW"
"MKNOD"
];
};
sops.secrets = {
"transmission/auth/OPENVPN_PROVIDER" = {};
"transmission/auth/OPENVPN_CONFIG" = {};
"transmission/auth/OPENVPN_USERNAME" = {};
"transmission/auth/OPENVPN_PASSWORD" = {};
};
sops.templates."transmission/env" = {
owner = "tristan";
content = ''
OPENVPN_PROVIDER="${placeholder."transmission/auth/OPENVPN_PROVIDER"}"
OPENVPN_CONFIG="${placeholder."transmission/auth/OPENVPN_CONFIG"}"
OPENVPN_USERNAME="${placeholder."transmission/auth/OPENVPN_USERNAME"}"
OPENVPN_PASSWORD="${placeholder."transmission/auth/OPENVPN_PASSWORD"}"
'';
};
}

View file

@ -0,0 +1,97 @@
{config, ...}: let
inherit (config) sops;
inherit (sops) templates placeholder;
redis_port = "6380";
authentik_port = "8084";
postgres = {
user = "authentik";
db = "authentik";
port = "5437";
};
authentik-config = {
autoStart = true;
image = "ghcr.io/goauthentik/server:2024.8.2";
volumes = ["/home/tristan/pods/authentik/media:/media"];
environment = {
AUTHENTIK_POSTGRESQL__USER = postgres.user;
AUTHENTIK_POSTGRESQL__HOST = "192.168.1.2";
AUTHENTIK_POSTGRESQL__PORT = postgres.port;
AUTHENTIK_REDIS__HOST = "192.168.1.2";
AUTHENTIK_REDIS__PORT = redis_port;
AUTHENTIK_EMAIL__FROM = "Authentik <tristan@tristans.cloud>";
AUTHENTIK_DEFAULT_USER_CHANGE_USERNAME = "false";
};
environmentFiles = [templates."authentik/environment".path];
dependsOn = ["authentik-redis" "authentik-postgres"];
};
in {
sops.secrets = {
"authentik/postgres_password" = {};
"authentik/secret_key" = {};
"mail/host" = {};
"mail/port" = {};
"mail/username" = {};
"mail/password" = {};
"mail/ssl" = {};
};
sops.templates = {
"authentik/environment" = {
content = ''
AUTHENTIK_POSTGRESQL__PASSWORD="${placeholder."authentik/postgres_password"}"
AUTHENTIK_SECRET_KEY="${placeholder."authentik/secret_key"}"
AUTHENTIK_EMAIL__HOST="${placeholder."mail/host"}"
AUTHENTIK_EMAIL__PORT="${placeholder."mail/port"}"
AUTHENTIK_EMAIL__USERNAME="${placeholder."mail/username"}"
AUTHENTIK_EMAIL__PASSWORD="${placeholder."mail/password"}"
AUTHENTIK_EMAIL__USE_SSL="${placeholder."mail/ssl"}"
'';
};
"authentik/postgres_env" = {
content = ''
POSTGRES_PASSWORD="${placeholder."authentik/postgres_password"}"
'';
};
};
virtualisation.oci-containers.containers = {
authentik-redis = {
autoStart = true;
image = "redis:7.2-alpine";
ports = ["${redis_port}:6379"];
volumes = ["authentik-redis:/data"];
};
authentik-server =
authentik-config
// {
cmd = ["server"];
ports = ["${authentik_port}:9000" "9084:9300"];
};
authentik-worker =
authentik-config
// {
cmd = ["worker"];
};
authentik-postgres = {
autoStart = true;
image = "docker.io/postgres:14-alpine";
ports = ["${postgres.port}:5432"];
volumes = ["/home/tristan/pods/authentik/db:/var/lib/postgresql/data"];
environment = {
POSTGRES_USER = postgres.user;
POSTGRES_DB = postgres.db;
};
environmentFiles = [templates."authentik/postgres_env".path];
};
};
services.nginx.virtualHosts."auth.tristans.cloud" = {
forceSSL = true;
enableACME = true;
locations."~" = {
proxyPass = "http://localhost:${authentik_port}";
proxyWebsockets = true;
};
};
}

View file

@ -1,6 +1,15 @@
{config, ...}: let {config, lib, pkgs, ...}: let
cfg = config.services.grafana; cfg = config.services.grafana;
secrets = config.sops.secrets; secrets = config.sops.secrets;
mkDashboards = dashboards: pkgs.symlinkJoin {
name = "dashboards";
paths = map mkDashboard dashboards;
};
mkDashboard = {name, url, sha256}: pkgs.writeTextFile {
inherit name;
text = builtins.readFile ( builtins.fetchurl {inherit url sha256;} );
destination = "/dash/${name}.json";
};
in { in {
sops.secrets."grafana/oidc_client_secret" = { sops.secrets."grafana/oidc_client_secret" = {
owner = "grafana"; owner = "grafana";
@ -25,6 +34,22 @@ in {
role_attribute_path = "contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer'"; role_attribute_path = "contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer'";
}; };
}; };
provision.dashboards.settings.providers = [{
name = "Node Exporter";
type = "file";
options.path = mkDashboards [
{
name = "node-exporter";
url = "https://grafana.com/api/dashboards/1860/revisions/37/download";
sha256 = "sha256:0qza4j8lywrj08bqbww52dgh2p2b9rkhq5p313g72i57lrlkacfl";
}
{
name = "synapse";
url = "https://raw.githubusercontent.com/element-hq/synapse/refs/heads/master/contrib/grafana/synapse.json";
sha256 = "sha256:07qlr0waw9phmyd38bv22bn5v303w3397b89l44l3lzwhpnhs16s";
}
];
}];
}; };
services.nginx.virtualHosts = { services.nginx.virtualHosts = {
${cfg.settings.server.domain} = { ${cfg.settings.server.domain} = {

View file

@ -1,6 +1,7 @@
{ {
services.jellyfin = { services.jellyfin = {
enable = true; enable = true;
group = "media"; # access to user stuff
}; };
services.nginx.virtualHosts."movies.tristans.cloud" = { services.nginx.virtualHosts."movies.tristans.cloud" = {
forceSSL = true; forceSSL = true;

94
nixos/services/loki.nix Normal file
View file

@ -0,0 +1,94 @@
{config, ...}: let
inherit (config.services) loki;
in {
services.loki = {
enable = true;
configuration = {
auth_enabled = false;
server.http_listen_port = 3100;
schema_config.configs = [
{
from = "2024-10-12";
object_store = "filesystem";
store = "tsdb";
schema = "v13";
index = {
prefix = "index_";
period = "24h";
};
}
];
storage_config."filesystem".directory = "/tmp/loki/chunks";
common = {
ring = {
instance_addr = "127.0.0.1";
kvstore.store = "inmemory";
};
replication_factor = 1;
path_prefix = "/tmp/loki";
};
limits_config.ingestion_rate_strategy = "local";
};
};
services.prometheus.scrapeConfigs = [{
job_name = "loki";
static_configs = [
{
targets = ["localhost:3100"];
}
];
}];
services.promtail = {
enable = true;
# https://grafana.com/docs/loki/latest/send-data/promtail/configuration/
configuration = {
server = {
http_listen_port = 9080;
grpc_listen_port = 0;
};
clients = [
{url = "http://localhost:3100/loki/api/v1/push";}
];
scrape_configs = [
{
job_name = "system";
journal = {
path = "/var/log/journal/";
};
relabel_configs = [
{
source_labels = ["__journal_message"];
target_label = "message";
regex = "(.+)";
}
{
source_labels = ["__journal__systemd_unit"];
target_label = "systemd_unit";
regex = "(.+)";
}
{
source_labels = ["__journal__systemd_user_unit"];
target_label = "systemd_user_unit";
regex = "(.+)";
}
{
source_labels = ["__journal__transport"];
target_label = "transport";
regex = "(.+)";
}
{
source_labels = ["__journal__priority_keyword"];
target_label = "severity";
regex = "(.+)";
}
];
}
];
};
};
services.grafana.provision.datasources.settings.datasources = [{
name = "Loki";
type = "loki";
url = "http://localhost:${toString loki.configuration.server.http_listen_port}";
}];
}

View file

@ -1,9 +1,44 @@
{config, ...}: let {config, lib, ...}: let
inherit (config) sops;
inherit (sops) templates placeholder;
inherit (import ./lib.nix) toAppRegistration; inherit (import ./lib.nix) toAppRegistration;
inherit (config.sops) templates placeholder;
in { in {
virtualisation.oci-containers.containers.mautrix-signal = {
image = "dock.mau.dev/mautrix/signal:v0.7.1";
dependsOn = ["mautrix-signal-psql"];
volumes = [
"/home/tristan/pods/signal-bridge/mautrix-signal:/data:z"
];
ports = [
"29328:29328"
"8000:8000"
];
};
# when you get around to backing this up
# 1. stop the server.
# 2. backup the db.
# 3. migrate to newer version of postgres
# 4. migrate db to local
virtualisation.oci-containers.containers.mautrix-signal-psql = {
image = "docker.io/postgres:14-alpine";
# ports = [ "127.0.0.1:5435:5432" ];
ports = [ "5435:5432" ];
volumes = [ "/home/tristan/pods/signal-bridge/db:/var/lib/postgresql/data" ];
environmentFiles = [templates."mautrix-signal/psql.env".path];
};
sops.templates = {
"mautrix-signal/psql.env" = {
owner = config.users.users.nobody.name;
content = lib.strings.toShellVars {
POSTGRES_PASSWORD = placeholder."mautrix-signal/postgres_password";
POSTGRES_USER = "signald";
POSTGRES_DB = "signald";
};
};
};
sops.secrets = { sops.secrets = {
"mautrix-signal/postgres_password" = {};
"mautrix-signal/as_token" = {}; "mautrix-signal/as_token" = {};
"mautrix-signal/hs_token" = {}; "mautrix-signal/hs_token" = {};
}; };
@ -20,10 +55,8 @@ in {
}; };
}; };
}; };
# mautrix-signal server currently in ansible/podman
services.matrix-synapse.settings.app_service_config_files = [ services.matrix-synapse.settings.app_service_config_files = [
templates."mautrix-signal/appservice.yaml".path templates."mautrix-signal/appservice.yaml".path
]; ];
} }

View file

@ -1,33 +1,11 @@
{config, ...}: let {config, ...}: {
inherit (config) sops; nixpkgs.config.permittedInsecurePackages = [
inherit (sops) templates placeholder; "olm-3.2.16"
inherit (import ./lib.nix) toAppRegistration; ];
in {
sops.secrets = {
"mautrix-whatsapp/as_token" = {};
"mautrix-whatsapp/hs_token" = {};
};
sops.templates = {
"mautrix-whatsapp/appservice.yaml" = {
owner = "matrix-synapse";
content = toAppRegistration {
id = "whatsapp";
port = config.services.mautrix-whatsapp.settings.appservice.port;
as_token = placeholder."mautrix-whatsapp/as_token";
hs_token = placeholder."mautrix-whatsapp/hs_token";
sender_localpart = "Gx8tLTHsxVlrdD3qibaPdaP9t7GhfciV";
"de.sorunome.msc2409.push_ephemeral" = true;
};
};
# "mautrix-whatsapp/env".content = ''
# MAUTRIX_WHATSAPP_APPSERVICE_AS_TOKEN=${placeholder."mautrix-whatsapp/as_token"}
# MAUTRIX_WHATSAPP_APPSERVICE_HS_TOKEN=${placeholder."mautrix-whatsapp/hs_token"}
# '';
};
services.mautrix-whatsapp = { services.mautrix-whatsapp = {
enable = true; enable = true;
# environmentFile = templates."mautrix-whatsapp/env".path; registerToSynapse = true;
settings = { settings = {
homeserver = { homeserver = {
address = "http://localhost:8008"; address = "http://localhost:8008";
@ -46,9 +24,4 @@ in {
}; };
}; };
}; };
services.matrix-synapse.settings.app_service_config_files = [
templates."mautrix-whatsapp/appservice.yaml".path
# "/var/lib/mautrix-whatsapp/whatsapp-registration.yaml"
];
} }

16
nixos/services/monero.nix Normal file
View file

@ -0,0 +1,16 @@
{...}: {
services.monero = {
enable = true;
rpc = {
address = "0.0.0.0";
restricted = true;
};
extraConfig = ''
prune-blockchain=1
confirm-external-bind=1
out-peers=64 # This will enable much faster sync and tx awareness; the default 8 is suboptimal nowadays
in-peers=1024 # The default is unlimited; we prefer to put a cap on this
zmq-pub=tcp://localhost:18083
'';
};
}

View file

@ -2,6 +2,26 @@
services.mpd = { services.mpd = {
enable = true; enable = true;
network.listenAddress = "0.0.0.0"; network.listenAddress = "0.0.0.0";
extraConfig = ''
audio_output {
type "fifo"
name "snapcast"
path "${config.services.snapserver.streams.mpd.location}"
format "${config.services.snapserver.streams.mpd.sampleFormat}"
mixer_type "software"
}
'';
}; };
networking.firewall.allowedTCPPorts = [config.services.mpd.network.port]; networking.firewall.allowedTCPPorts = [config.services.mpd.network.port];
services.snapserver = {
enable = true;
openFirewall = true;
buffer = 1000;
streams.mpd = {
type = "pipe";
location = "/run/snapserver/mpd";
sampleFormat = "44100:16:2";
codec = "pcm";
};
};
} }

View file

@ -1,6 +1,7 @@
{ {
config, config,
pkgs, pkgs,
lib,
... ...
}: let }: let
nextcloud = config.services.nextcloud; nextcloud = config.services.nextcloud;
@ -27,6 +28,7 @@ in {
services.nextcloud = { services.nextcloud = {
enable = true; enable = true;
https = true; https = true;
package = pkgs.nextcloud29;
hostName = "files.${config.networking.domain}"; hostName = "files.${config.networking.domain}";
configureRedis = true; configureRedis = true;
database.createLocally = true; database.createLocally = true;
@ -78,15 +80,16 @@ in {
notes notes
maps maps
previewgenerator previewgenerator
deck
; ;
oidc_login = pkgs.fetchNextcloudApp { oidc_login = pkgs.fetchNextcloudApp {
sha256 = "sha256-cN5azlThKPKRVip14yfUNR85of5z+N6NVI7sg6pSGQI="; sha256 = "sha256-DrbaKENMz2QJfbDKCMrNGEZYpUEvtcsiqw9WnveaPZA=";
url = "https://github.com/pulsejet/nextcloud-oidc-login/releases/download/v3.0.2/oidc_login.tar.gz"; url = "https://github.com/pulsejet/nextcloud-oidc-login/releases/download/v3.2.0/oidc_login.tar.gz";
license = "agpl3Only"; license = "agpl3Only";
}; };
news = pkgs.fetchNextcloudApp { news = pkgs.fetchNextcloudApp {
sha256 = "sha256-aePXUn57U+1e01dntxFuzWZ8ILzwbnsAOs60Yz/6zUU="; sha256 = "sha256-jH1F/IZItlZEpsfgXhRojiYD6ZEVhsuRvz8Qs0Z3UFI=";
url = "https://github.com/nextcloud/news/releases/download/25.0.0-alpha4/news.tar.gz"; url = "https://github.com/nextcloud/news/releases/download/25.0.0-alpha9/news.tar.gz";
license = "agpl3Only"; license = "agpl3Only";
}; };
}; };

View file

@ -34,4 +34,9 @@ in {
}; };
}; };
}; };
services.grafana.provision.datasources.settings.datasources = [{
name = "Prometheus";
type = "prometheus";
url = "http://localhost:${toString prometheus.port}";
}];
} }

View file

@ -16,6 +16,8 @@
inherit (config.services) matrix-synapse matrix-sliding-sync; inherit (config.services) matrix-synapse matrix-sliding-sync;
inherit (sops) secrets templates; inherit (sops) secrets templates;
in { in {
imports = [./metrics.nix];
services.postgresql.enable = true; services.postgresql.enable = true;
services.postgresql.initialScript = pkgs.writeText "synapse-init.sql" '' services.postgresql.initialScript = pkgs.writeText "synapse-init.sql" ''
CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse'; CREATE ROLE "matrix-synapse" WITH LOGIN PASSWORD 'synapse';
@ -66,7 +68,7 @@ in {
server_name = domain; server_name = domain;
baseurl = "https://${domain}"; baseurl = "https://${domain}";
oidc_providers = []; oidc_providers = [];
settings.listeners = [ listeners = [
{ {
inherit port; inherit port;
bind_addresses = ["localhost"]; bind_addresses = ["localhost"];

View file

@ -0,0 +1,25 @@
let
port = 9008;
in {
services.prometheus.scrapeConfigs = [{
job_name = "synapse";
metrics_path = "/_synapse/metrics";
static_configs = [{
targets = ["localhost:${toString port}"];
}];
}];
services.matrix-synapse.settings = {
enable_metrics = true;
listeners = [
{
port = port;
type = "metrics";
bind_addresses = ["127.0.0.1"];
tls = false;
resources = []; # unneeded with type: metrics, just to make the nix module happy
}
];
};
# Grafana rules?
# https://github.com/element-hq/synapse/tree/master/contrib/prometheus/
}

View file

@ -1,45 +1,15 @@
{ {
inputs, inputs,
pkgs, pkgs,
lib,
config,
... ...
}: { }: {
imports = [ imports = [
inputs.stylix.nixosModules.stylix inputs.stylix.nixosModules.stylix
]; ];
nixpkgs.config.permittedInsecurePackages = [
"electron-25.9.0"
];
# use pipewire
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
};
# pipewire raop
networking.firewall.allowedUDPPorts = [6002 6001];
# network streaming
networking.firewall.allowedTCPPorts = [4713];
security.pam.services.swaylock = {};
security.polkit.enable = true; security.polkit.enable = true;
systemd.user.services.polkit-gnome-authentication-agent-1 = {
description = "polkit-gnome-authentication-agent-1";
wantedBy = ["graphical-session.target"];
wants = ["graphical-session.target"];
after = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
hardware.opentabletdriver.enable = true; hardware.opentabletdriver.enable = true;
@ -47,7 +17,10 @@
services.printing.enable = true; services.printing.enable = true;
services.dbus.enable = true; services.dbus = {
enable = true;
packages = [pkgs.gcr];
};
programs.light.enable = true; programs.light.enable = true;
programs.dconf.enable = true; programs.dconf.enable = true;
@ -59,19 +32,34 @@
virtualisation.waydroid.enable = true; virtualisation.waydroid.enable = true;
networking.stevenblack = { networking.stevenblack = {
enable = true; enable = lib.mkDefault true;
block = ["porn" "gambling"]; block = ["porn" "gambling"];
}; };
stylix = { stylix = {
enable = true;
image = ../images/nix-soft.png; image = ../images/nix-soft.png;
base16Scheme = "${pkgs.base16-schemes}/share/themes/onedark.yaml"; base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
opacity = { opacity = {
terminal = 0.9; terminal = 0.9;
applications = 0.9; applications = 0.9;
desktop = 0.9; desktop = 0.9;
popups = 0.9; popups = 0.9;
}; };
cursor = {
name = "Vanilla-DMZ";
package = pkgs.vanilla-dmz;
size = 24;
};
targets = {
gtk.enable = false; # fails to switch with cosmic overriding it (grr)
grub = {
useImage = true;
};
nixvim = {
transparentBackground.main = true;
};
};
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
@ -84,4 +72,8 @@
nerdfonts nerdfonts
interalia interalia
]; ];
home-manager.users.${config.user}.imports = [
../home/workstation.nix
];
} }

34
pkgs/mongodb.nix Normal file
View file

@ -0,0 +1,34 @@
{
stdenv,
pkgs,
...
}: let
version = "6.0.14";
in
stdenv.mkDerivation {
name = "mongodb";
inherit version;
src = builtins.fetchTarball {
url = "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-debian11-${version}.tgz";
sha256 = "sha256:0lghfh8dpq159y2m0b7wg3xks2s59n9s5xmcw6ng2lrg815s6aiz";
};
dontBuild = true;
nativeBuildInputs = with pkgs; [
openssl_1_1
xz
curl
libgcc
autoPatchelfHook
];
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp -R bin $out/
runHook postInstall
'';
}

View file

@ -4,20 +4,20 @@
fetchgit, fetchgit,
gitUpdater, gitUpdater,
}: }:
buildLua rec { buildLua {
pname = "mpv-skipsilence"; pname = "mpv-skipsilence";
version = "1.0"; version = "1.0";
src = fetchgit { src = fetchgit {
url = "https://codeberg.org/ferreum/mpv-skipsilence.git"; url = "https://codeberg.org/ferreum/mpv-skipsilence.git";
hash = "sha256-aAzLegotOUILhpz7GcMJvCY4R3jSZCDIKOwVfM21kdY="; hash = "sha256-fg8vfeb68nr0bTBIvr0FnRnoB48/kV957pn22tWcz1g=";
}; };
passthru.updateScript = gitUpdater {}; passthru.updateScript = gitUpdater {};
meta = with lib; { meta = with lib; {
description = "Increase playback speed during silence - a revolution in attention-deficit induction technology."; description = "Increase playback speed during silence - a revolution in attention-deficit induction technology.";
homepage = "https://github.com/ferreum/mpv-skipsilence"; homepage = "https://github.com/ferreum/mpv-skipsilence";
license = licenses.unlicense; # actually they don't have a license license = licenses.gpl2;
maintainers = []; maintainers = [];
}; };
} }

View file

@ -1,24 +1,38 @@
nextcloud: nextcloud:
admin_password: ENC[AES256_GCM,data:ZBc/Z5F/DWPM78XhO3mVxEfEYjPoXHgqfg==,iv:ih9YuI+k4ksKBOhpezoJ/L5ac7P/JGLqs2B6ZuqZrj0=,tag:IDFU9NQoXHR1Ph5YtLC4lQ==,type:str] admin_password: ENC[AES256_GCM,data:oE7SeKE40NsLF5FrxKJheyzSXLcL8Hs1+w==,iv:ih9YuI+k4ksKBOhpezoJ/L5ac7P/JGLqs2B6ZuqZrj0=,tag:tRTNDAaAvRe7FSMMCneYkA==,type:str]
oidc_client_secret: ENC[AES256_GCM,data:nIVLfC+22fEurR6FXdUwz4+rPuXzlM5HG4lnRI/m1lOaiw+C9DA3WV15DP5IXMn6BeBmDMnXbfdGt0hoV32y8bkfcals0C4wUitI63sYRJ6+f+N85IeAolfvYi+6gCwKZZhwRZdZJOQVOoFH8bvC0zLz6dzjL1/C5POX4C57URs=,iv:uV6KssluRg4+aOg7DPewK9c3eIkY3y/7ij7uYBLx9Kw=,tag:gEvApHIStThboRsP0YEoFw==,type:str] oidc_client_secret: ENC[AES256_GCM,data:dTQlsiPvKPRETEy1cg7RIWxeapFOdoMqp1xpVnYFd8zxRyZGIYJNlSZAkc4ZZIMM76jrAnMw7jVArqCX/pma0GMxb4GqITYAHJfe6yVPZYVY9UHUeCQpwwdIMUxYJqYgcCL4VFn7tdtc6vITl+b0KH0GBFQWg07ROJCGfFiICa4=,iv:uV6KssluRg4+aOg7DPewK9c3eIkY3y/7ij7uYBLx9Kw=,tag:UM7fvtjscORH0BxoiUm++Q==,type:str]
grafana: grafana:
oidc_client_secret: ENC[AES256_GCM,data:XU81XrM/aTZ/RDc3UPunOFQdfjJldKw3usMA5NfQkgxJYSq5NSu1ZQXsMuly4xbcYULiuUtkTAnb7Xzge+yIDoLfrZHab4mQgtLeK6hzZgLHYeSSEtQCXEYsL0p6ulA2OLrW6KoKl/o1EjiA+8htimgc7yNatdo6pBwwUXZFxpQ=,iv:de2P5uu1t0si7s7BqG4ukvouxH1TlCxgR28wRsz7i/I=,tag:1u0Wd9HRzbJRQtNbwDHOIQ==,type:str] oidc_client_secret: ENC[AES256_GCM,data:vC/9eABn0slzgiaI372dhD46ggU+dsjgA9B7Kv2SLS15OWFBwqRnRhGxNYO6Iwev656t2RwZlJwbQwS8sIrnFD3NU+IEGMvz4sVWbSj7tHxojNo3+Ne8Kg7b03AlBYcEmYqTIx94Nbx8DsZtFRGAIuFYDpEpVxC9jWgPtqB21OE=,iv:de2P5uu1t0si7s7BqG4ukvouxH1TlCxgR28wRsz7i/I=,tag:wToLDNtOafhuMe9thxZDuQ==,type:str]
anki: anki:
password: ENC[AES256_GCM,data:dZsz/Z0rdP8vVFEGlck=,iv:rLjrfKXnz7hiYSOOY+uTGQCmvMLZbo3Xle+069hAB+A=,tag:sNuvL9tGBXs9OPoFVfjdSw==,type:str] password: ENC[AES256_GCM,data:Lz9WwJ/JgboJEqnClj4=,iv:rLjrfKXnz7hiYSOOY+uTGQCmvMLZbo3Xle+069hAB+A=,tag:PrWQlZYREWGQJwPVFX0byQ==,type:str]
synapse: synapse:
postgres: ENC[AES256_GCM,data:pP/Clrcd/dTjI81Wr9I=,iv:nx3eVKH1DXGk3tipbzlIGGyZB3/bJP5TSVMFVNHTIPs=,tag:3PbODZtFlb9XtuBfO/Ey/g==,type:str] postgres: ENC[AES256_GCM,data:/jukTywBVoRi8KkDpAA=,iv:nx3eVKH1DXGk3tipbzlIGGyZB3/bJP5TSVMFVNHTIPs=,tag:DDmnJ1yiiZcGqvGj6uTG7w==,type:str]
oidc_client_secret: ENC[AES256_GCM,data:GXEHHAf5pi/34DY8rUtb1r+0w9HdH2LfeYzREq9BssbspORGd2lOGW22kpUWQzMP/LN8qqx0+EDxlnUuz6MbKofdDPO53Ghrkv7eKsgHdI4g8NbneOEIe4Uurjsg+ibn2EIAWP6HsdwDoLPpS260HyciHJz15i8OpyPatv+bhUc=,iv:pigc8d/LPwy/mBrlUzOFR1nIUrulYZ67nq4bI4Mn+MI=,tag:5fQj8XiXmlC0/T4Muht7bA==,type:str] oidc_client_secret: ENC[AES256_GCM,data:QdTHn5n+VcZ7EpZRI9EGHm+F5CWWr72nEqyJC4itEnSM+MZfnp941rRBUefU067VCf/mZR8UWkMJYATR2wcQTGluF73nHOeV8c1XUwT0TXNgPNhPdXisRcZF8OCYzU9HmdMKieiH/Bmc/mSXU3AZuTe9UXhf0CyVs1HgoENyfJQ=,iv:pigc8d/LPwy/mBrlUzOFR1nIUrulYZ67nq4bI4Mn+MI=,tag:nKDeJBp9VhzS3fOx64N0kA==,type:str]
signing_key: ENC[AES256_GCM,data:AuXyep/aoKn0EoXFgphhlwyvqiwnmRAbGsjzQtCHOVe1Nsdd1aZZdmANt3NXbNJbtjbowIYGbYTizQ==,iv:jKfEBdXSIrg1WQRvWxi+CUiO2mXOfULkg/i3YSD4d9k=,tag:EZJnoZVyrjb0fcRbvyuiPg==,type:str] signing_key: ENC[AES256_GCM,data:f3EEHTnY5qm2TUKEXMLsrMt9qhJaz9VzRwGFV9+xUP32fwxwbZc/EopOVJ03OvQwG695at+26MRWcQ==,iv:jKfEBdXSIrg1WQRvWxi+CUiO2mXOfULkg/i3YSD4d9k=,tag:EYhdgGZkx0qZqAqlA/RJuQ==,type:str]
sliding_sync_secret: ENC[AES256_GCM,data:EureGgSONw+29RnTBcG7+Hpjs3mOk1Zr75glc582Tr9ITFfMczAdfY0FlWQgDxiPnl3o2GqlvdQ2CwDmpVGUVQ==,iv:JUKLrxrYQmCF15o+PwY1PzNW1h9FrGxdbSFGCzm3RdA=,tag:/TMv9LcCRLoTw3MDmpE0oQ==,type:str] sliding_sync_secret: ENC[AES256_GCM,data:zog0Bw+GyNnaLKtxhH3p4nMYtT6CcJ6bpaq1UagIxuywKjxSJkjKdmWXDrQ+mgswvc8rZ1GRDTsuYJmjcr3JwQ==,iv:JUKLrxrYQmCF15o+PwY1PzNW1h9FrGxdbSFGCzm3RdA=,tag:EXxXOAVbGAemOBFRhXKPqg==,type:str]
mautrix-whatsapp:
as_token: ENC[AES256_GCM,data:x1iIfwaRdSzC7wo684FY5ZCytj+uQSS2k8UZ/Sm/0gy7jnjsb6Eyl0I5tdNf7mYk2gdTtfmc+dVThOP3aGIZXQ==,iv:hvVr1MZfpLewomTW5pUhOvrQ2fEkQy4LNnfqslkeFgQ=,tag:5eUZLn5Bd2D5GWyIx9xevw==,type:str]
hs_token: ENC[AES256_GCM,data:y8q41zg1NFco0fs7Q/yZVIPCdrUsB8/CRiffBpAVWsH0vCCHQvBs6VUGZmZwJVySkxSfFqBdCc/TF38SPwhxCg==,iv:sJ0cldlCTpGRMYT0u9ZGFVI70m3VBCZqn/l4cwUDyAI=,tag:D0QE2TQxLNnEv6/ECCLnRw==,type:str]
mautrix-signal: mautrix-signal:
as_token: ENC[AES256_GCM,data:wu9ohlIUn6dBYxa7jZzG9DRVRrBCnmXsc7txntF6U6eW6rpe/bvKWDR5/db1ZtMxAv/MZrTephJ81yqtr8aDsw==,iv:L+Pj1Mg5SlaKs0kb68qPzJX1FI7mV8boh4OonfWBy8o=,tag:J6F3CP5OJbyPBr5iVWhg0w==,type:str] as_token: ENC[AES256_GCM,data:13EBWO8ZD2LjkFLI3Clvn4qU1u+rCrPwlvwLaNDlKt3Zf2YxCvM3m1dprj5FyF3fNETSgzbMe6tXsHcxjMi5ag==,iv:L+Pj1Mg5SlaKs0kb68qPzJX1FI7mV8boh4OonfWBy8o=,tag:nIsr0NdIDU2a3DYGm7OXeA==,type:str]
hs_token: ENC[AES256_GCM,data:8OAHb5+k7uRW5EtjrNiTFjG1lf3txePHjpVYaDtJ1MfbtU8jN/T50PENPwFHR9iJSh2Zma7PGgFjwlWHGQEW8A==,iv:YoHj7qGYVA8C8HL8XLcarHwkVrdc7dQHecYF0yxvqwM=,tag:3y/K1iztmWrWR34/3vjopA==,type:str] hs_token: ENC[AES256_GCM,data:PJkY4F3Nu6C79v3FaEw6sVr7Y+IIjLJbc2h+L7pEFYyfyolWPMTeQf85Js1zbGEsRLWvyJTAQXdg68KldYCg2Q==,iv:YoHj7qGYVA8C8HL8XLcarHwkVrdc7dQHecYF0yxvqwM=,tag:xoxt0sprxTpHhf4XLfrCaA==,type:str]
postgres_password: ENC[AES256_GCM,data:k+BHWgiNXQeujuShmDgu3anjLgcd,iv:J8sUNC6S/RsMhu3LW37xp5sddJxicfVaOrsfsptp/W4=,tag:7RB6j19tBEp7Z+VSEUR4mQ==,type:str]
mautrix-instagram: mautrix-instagram:
as_token: ENC[AES256_GCM,data:pNO76BcGejQdCc5X4f/UvSsBIPU6QZCCQTJvwVIXRf3rnb9ewWNMEtYXlqj886yh3g5SgqQ4Uhqby/7vrMxREA==,iv:uYU7ACk4wEPzqUCpt5KBt5Y8LoVIdAlNvdWj5Jm94qM=,tag:vJHOhwJBPlgUPu1SFqI4ew==,type:str] as_token: ENC[AES256_GCM,data:DP/VQGK2DO4ixT/3wLBhvKxCcauEgXmDD4vW8k5uJFXAq7gtUXasLIYZ6pkUx0Vzd5kT/XZMhFOJyOT2Cyv38Q==,iv:uYU7ACk4wEPzqUCpt5KBt5Y8LoVIdAlNvdWj5Jm94qM=,tag:RoOhGoQ2BeDe0n6/w4TuPA==,type:str]
hs_token: ENC[AES256_GCM,data:m1CK8Ae6QyJKgDZm904xMpZ1KgKxEUpmQ1jdKOkjexgwAWjjtYF+RVximtcXwxPg/0jkbK/LMlxA89ic+zajiA==,iv:YLed92mS+2Cpud2f8Gq+zlpSVyPo7RVNGOUPCIRDi94=,tag:rRwhYn88ZZwm5sDI1etR2g==,type:str] hs_token: ENC[AES256_GCM,data:ljzZE6uwHq7jH5oIej4TWMeFtDolRSCg1oNr7xkjK7t3EpZrkg2YVOvWJtf/B+43cx7/BzVftBM4NOElQfRUDA==,iv:YLed92mS+2Cpud2f8Gq+zlpSVyPo7RVNGOUPCIRDi94=,tag:KEqa64BqbG7lmpV2sTqHkg==,type:str]
authentik:
postgres_password: ENC[AES256_GCM,data:jUVLMW1kFABZ3uWeWp4oWGOQDm7IBpF1BKNg/h88UqbpgakSCVuF+GIOSTxpSdc0,iv:UxFDFYWNBQospGoHlrvLQJyypIszPqpkeJy1IGr6/7I=,tag:IIN24+k4k37IszNFK1+rRg==,type:str]
secret_key: ENC[AES256_GCM,data:qYS0HIImVKnMS9ywEJK2E0WLHgcWIYTZVapA/fL79abqK1qKPeVIQ3u/SqwkGBgg,iv:WN/LXUNrd+DbxfxwotedlYnyzE2D1c6C2e0UgCXUWX8=,tag:E5ABLXy5vDxDPdBGR5HoLg==,type:str]
mail:
host: ENC[AES256_GCM,data:FGKGHXYVwbDp17nYwrQtvGp0FYuK,iv:+hjhL2jbMP9NWYub/etBhFXxAfzoIEneepRw5uHL8bs=,tag:Uy3BihID9/h1Y7874KqHMw==,type:str]
port: ENC[AES256_GCM,data:q3NZ,iv:I3dK4v/h5nFLNk4yihQxkJiyAir9MLDAQIeGbSn3j+I=,tag:TAZg45IQF/dlLrH1vjBlmA==,type:str]
username: ENC[AES256_GCM,data:DJ8D7TY2o2PimB0WX4L6gEJr7M6XRQ==,iv:LkZh8eaBZ+Z3+bjpyB3MkWTRpjtk3/bszseT9KCfDmM=,tag:Nf7ePRKAqk+xRpKSem/QSw==,type:str]
password: ENC[AES256_GCM,data:GqR8lvyF21djWQT0smHQb42FOt56ZHPnLYS0ekoyyH0=,iv:Rn30tJAoahkMr2ISDbyHClHDdjSF41MqtTwlSGUQELw=,tag:ab7k7Afi5Dfw4NkLbF/cUg==,type:str]
ssl: ENC[AES256_GCM,data:swCVBQ==,iv:Us4kZfQ2wIx/qJXDaPDuUNvGU2F+U8EtV21SPbTebe8=,tag:Zuc0y6aTyjQBe4ZV7zy3NA==,type:str]
transmission:
auth:
OPENVPN_PROVIDER: ENC[AES256_GCM,data:uk/rxQ==,iv:WycsUcM9qRW6ExylDK9kCD2PKT9XMijLBJXkYKUmhDI=,tag:AiBA+UVlKfMhpyV3MB9ZBA==,type:str]
OPENVPN_CONFIG: ENC[AES256_GCM,data:mHMLA2Rqte+aEGstKCan3fNPEqwb,iv:wvLx3rWNcDVek6bmXBu+39AlnXpviNNwCItLAWWVDzY=,tag:1ArWMperFmOFSCdehWibNg==,type:str]
OPENVPN_USERNAME: ENC[AES256_GCM,data:RQ+hGLE6YEgN/aaa2TLpkg==,iv:oG794WxGe0t1ZI0PyC45ZgCPA0Ar2m/dSVDdMYBKJvY=,tag:CGnEu8ds0s4aH4ImCrNWNQ==,type:str]
OPENVPN_PASSWORD: ENC[AES256_GCM,data:Jw==,iv:uGAaXFWfpSaeqY7yC9cR9iqblH3E3hudnrnIlOvdRCg=,tag:P1XJ2SBY82z9YZP9J/n5SA==,type:str]
namecheap: ENC[AES256_GCM,data:PTEQK8+G1FfmvRk9IxrAZjCAhiKdV0AA+JxaJRZvbHU=,iv:xTrJzPooM0xzs9xgkNGWKRzRHeIIhMGa8EYW2/41ZvA=,tag:KHdLKuip439QNeAiBwreqg==,type:str]
sops: sops:
kms: [] kms: []
gcp_kms: [] gcp_kms: []
@ -28,14 +42,14 @@ sops:
- recipient: age106vffwu4y8cx90y0rtzajgpafl8jq7ty5hf6pur2gjsuq3g2lf5qjmdq0q - recipient: age106vffwu4y8cx90y0rtzajgpafl8jq7ty5hf6pur2gjsuq3g2lf5qjmdq0q
enc: | enc: |
-----BEGIN AGE ENCRYPTED FILE----- -----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4a3EwTXQwV3hxNW1zNXow YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDc1R5TFAvZFFMbTJqWVl5
Q1UxRHcwaVdhNHo5N0QvbE1maTkxdFBKZUJvCnpVYklIamlic1A4SDluQnhod2Z3 STA0YjBRSmk2N1dvUG9ETWYvRTNXMTFoYUVJCk81dmM2c0JLcnpzUjBsazZrenRK
MTVxRlJLVWd5dkZlTjE1OGRIZVo4QmsKLS0tIHI4bm01WjNucUlvYzFTSzhNSkQ3 YXZkQ2pqRTNrTDBFK1FrQ3BRNmI0STQKLS0tIHpseXFsSlhLNVhHeFNhVXNEcmM3
NUFIN3NPU2pTZ0NZRXdQY0xhWlI5T3cKd5XCj1aNsD+7+MfiAPGb1iAW9AgzyagG S3ZwcHhkdEEvY0pINDloand5S0NycHcKEpIt5EeIKhLQK7f74sWVN/x5gzh/Jq7x
A7cwF9kQwWWLud9z4v6epuDkqGF+7uIy7N/CwBaEgi8+AS8o27wo4g== UUN5QtysRbWVGnWRxdNB8LIMjDJY9jRojycdQfSNebaz5ZLjEp8dZQ==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2024-03-23T23:24:16Z" lastmodified: "2025-01-17T23:54:41Z"
mac: ENC[AES256_GCM,data:bs8t7nH5BdIz4uQd33M2pt+AVhqfBEJy9l8AFl8p80GLAMg5zKlDWxtVCPrWk8viJvfMkhvwEovBizoy3m7gt8iWLf+dtznBjALtUXVAc/+dmACUS8E9JHHKcvOHxT/cYCuU3t6pDJWlbfnpBtKSSHH8Z/YblYMlkeoNeNOoAwU=,iv:9fKO44c5TNMBgHqcuV6Fu+GW8TjND+32KDEerawpZL4=,tag:Ps8kelq+8iY88mdqugRTMg==,type:str] mac: ENC[AES256_GCM,data:kX07sYwKyAu2ElYoBIuaVVryIGIUowxS4ZMxIoX9/aDQY9+yVrmaWzj1kmQNyTqoSBZyetDGQzNV3mMjgCpIQ2XjJdCB5lH4M5DOV63A3pwDwDeHSzzTrURY6xubeswl8o+2k+gxD0/oLLB9j+YZxb9F1oKQt2cK1dzOYPdtUL8=,iv:ftaeEg78WejtZM6J8BiahmsSbQub/5Kz/oLVU3nJhtA=,tag:eobu6KIZwltpC43qXpTVaQ==,type:str]
pgp: [] pgp: []
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.8.1 version: 3.9.0