Add initial legacy configuration
This commit is contained in:
parent
febfe1d970
commit
db07652d99
64 changed files with 3287 additions and 13 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
use flake
|
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/result*
|
||||||
|
*.qcow2
|
||||||
|
/.direnv
|
||||||
|
/book
|
||||||
|
/.sops.yaml
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "private"]
|
||||||
|
path = private
|
||||||
|
url = https://git.qo.is/fabianhauser/nix-config-private.git
|
||||||
|
branch = main
|
469
flake.lock
generated
469
flake.lock
generated
|
@ -1,5 +1,137 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"catppuccin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1739934729,
|
||||||
|
"narHash": "sha256-PcrLk10meIJICzUJqtCMOJxoITzbH52fZg2XAB7SSsM=",
|
||||||
|
"owner": "catppuccin",
|
||||||
|
"repo": "nix",
|
||||||
|
"rev": "b1ff2a638afa827f1473498190a2c1cae1cf41cf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "catppuccin",
|
||||||
|
"repo": "nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commonmark-simple": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1707333942,
|
||||||
|
"narHash": "sha256-o1am93UXviPVdwwPPL5DcD8M4gwFple8SKw/lVmixa8=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "commonmark-simple",
|
||||||
|
"rev": "0308362957d77eea462c2c99d110820fbf30b4b8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "commonmark-simple",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"commonmark-wikilink": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1738248145,
|
||||||
|
"narHash": "sha256-UN2Nh+uf+DzM336Ojzr6YZV4RJy8BPx9Q5GZpax3wt0=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "commonmark-wikilink",
|
||||||
|
"rev": "1d7aa327fb33b41f3c4899d5b29aa122780c900f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "commonmark-wikilink",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"crane": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731098351,
|
||||||
|
"narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=",
|
||||||
|
"owner": "ipetkov",
|
||||||
|
"repo": "crane",
|
||||||
|
"rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "ipetkov",
|
||||||
|
"repo": "crane",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"disko": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1739841949,
|
||||||
|
"narHash": "sha256-lSOXdgW/1zi/SSu7xp71v+55D5Egz8ACv0STkj7fhbs=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"rev": "15dbf8cebd8e2655a883b74547108e089f051bf0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ema": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1738428103,
|
||||||
|
"narHash": "sha256-vZgaNI0y6IKnWDSLFsl7mwSUZ3ONgduclQkB6WK0VMo=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "ema",
|
||||||
|
"rev": "4478e88d33126ef0b478b2980a71592b8f9afd6b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "ema",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"emanote": {
|
||||||
|
"inputs": {
|
||||||
|
"commonmark-simple": "commonmark-simple",
|
||||||
|
"commonmark-wikilink": "commonmark-wikilink",
|
||||||
|
"ema": "ema",
|
||||||
|
"emanote-template": [],
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"flake-root": "flake-root",
|
||||||
|
"haskell-flake": "haskell-flake",
|
||||||
|
"heist-extra": "heist-extra",
|
||||||
|
"nixos-unified": "nixos-unified",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"treefmt-nix": "treefmt-nix",
|
||||||
|
"unionmount": "unionmount"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1739923609,
|
||||||
|
"narHash": "sha256-ZKdpDTsVUoxBiqyXqvkM1Klr6oc4ORCqX1nlm5EW05E=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "emanote",
|
||||||
|
"rev": "6a4295cd7fad530beafe8aa45bdaf0693254b3c0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "emanote",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ez-configs": {
|
"ez-configs": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": [
|
"flake-parts": [
|
||||||
|
@ -23,7 +155,64 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"fcc-unlock": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1737026299,
|
||||||
|
"narHash": "sha256-1Tjq0nNWCdncwv5kkC5ZxSAjJRNyREU04QpPCtchQZo=",
|
||||||
|
"owner": "fabianhauser",
|
||||||
|
"repo": "fcc-unlock",
|
||||||
|
"rev": "3b53fefd0f43de3ccbcc4e7f709cd4f46bda7e46",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "fabianhauser",
|
||||||
|
"repo": "fcc-unlock",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1696426674,
|
||||||
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"emanote",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1733312601,
|
||||||
|
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
|
@ -41,6 +230,95 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-parts_3": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"lanzaboote",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730504689,
|
||||||
|
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-root": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1723604017,
|
||||||
|
"narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "flake-root",
|
||||||
|
"rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "flake-root",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"lanzaboote",
|
||||||
|
"pre-commit-hooks-nix",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"haskell-flake": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1734984991,
|
||||||
|
"narHash": "sha256-oUYtRBD3Yhw2jvKYo0lfd82fgEQQbFoiJcHO923gmOc=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "haskell-flake",
|
||||||
|
"rev": "daf00052906bdd977e57a07f7048437214232e87",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "haskell-flake",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"heist-extra": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1737313814,
|
||||||
|
"narHash": "sha256-WCXhs/xhCR4CKBEadQjqqgUb47bLzDY7P7oL5cSgDHc=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "heist-extra",
|
||||||
|
"rev": "6f73e000a34b7c054b516b9504b5a7ed08ce6a2d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "heist-extra",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -62,13 +340,54 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lanzaboote": {
|
||||||
|
"inputs": {
|
||||||
|
"crane": "crane",
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-parts": "flake-parts_3",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
|
||||||
|
"rust-overlay": "rust-overlay"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1737639419,
|
||||||
|
"narHash": "sha256-AEEDktApTEZ5PZXNDkry2YV2k6t0dTgLPEmAZbnigXU=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "lanzaboote",
|
||||||
|
"rev": "a65905a09e2c43ff63be8c0e86a93712361f871e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "v0.4.2",
|
||||||
|
"repo": "lanzaboote",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixos-unified": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1729697921,
|
||||||
|
"narHash": "sha256-gqcmWE+4Vr5/l6AoQc2jIbJHCAXAY+qWPC0ruoAHV1Q=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "nixos-unified",
|
||||||
|
"rev": "e60e64841e74c777799624531dcb2f311f95f639",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "nixos-unified",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1739866667,
|
"lastModified": 1736012469,
|
||||||
"narHash": "sha256-EO1ygNKZlsAC9avfcwHkKGMsmipUk1Uc0TbrEZpkn64=",
|
"narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "73cf49b8ad837ade2de76f87eb53fc85ed5d4680",
|
"rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -90,16 +409,138 @@
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz"
|
"url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1730741070,
|
||||||
|
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1739866667,
|
||||||
|
"narHash": "sha256-EO1ygNKZlsAC9avfcwHkKGMsmipUk1Uc0TbrEZpkn64=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "73cf49b8ad837ade2de76f87eb53fc85ed5d4680",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pre-commit-hooks-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": [
|
||||||
|
"lanzaboote",
|
||||||
|
"flake-compat"
|
||||||
|
],
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"lanzaboote",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731363552,
|
||||||
|
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"private": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1740248734,
|
||||||
|
"narHash": "sha256-BJM/A7lFYi7G+AaNjttLNmZdXGGFi1dI82Mse+JYkes=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "f2b5747476e21c585d304e38f2ba519e9a99714d",
|
||||||
|
"revCount": 1,
|
||||||
|
"type": "git",
|
||||||
|
"url": "file:./private"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "file:./private"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"catppuccin": "catppuccin",
|
||||||
|
"disko": "disko",
|
||||||
|
"emanote": "emanote",
|
||||||
"ez-configs": "ez-configs",
|
"ez-configs": "ez-configs",
|
||||||
"flake-parts": "flake-parts",
|
"fcc-unlock": "fcc-unlock",
|
||||||
|
"flake-parts": "flake-parts_2",
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixpkgs": "nixpkgs",
|
"lanzaboote": "lanzaboote",
|
||||||
"treefmt-nix": "treefmt-nix"
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"private": "private",
|
||||||
|
"treefmt-nix": "treefmt-nix_2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-overlay": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"lanzaboote",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731897198,
|
||||||
|
"narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=",
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"rev": "0be641045af6d8666c11c2c40e45ffc9667839b5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "oxalica",
|
||||||
|
"repo": "rust-overlay",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"treefmt-nix": {
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"emanote",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1734982074,
|
||||||
|
"narHash": "sha256-N7M37KP7cHWoXicuE536GrVvU8nMDT/gpI1kja2hkdg=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "e41e948cf097cbf96ba4dff47a30ea6891af9f33",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"treefmt-nix_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
|
@ -118,6 +559,22 @@
|
||||||
"repo": "treefmt-nix",
|
"repo": "treefmt-nix",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"unionmount": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1710078535,
|
||||||
|
"narHash": "sha256-gKBgBtuiRTD3/3EeY8aMgFzuaSEffJacBxsCB3ct1eg=",
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "unionmount",
|
||||||
|
"rev": "41ae982fa118770bf4d3a3f2d48ac1ffb61c9f09",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "srid",
|
||||||
|
"repo": "unionmount",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|
61
flake.nix
61
flake.nix
|
@ -1,9 +1,11 @@
|
||||||
{
|
{
|
||||||
description = "Description for the project";
|
nixConfig = {
|
||||||
|
extra-substituters = "https://cache.garnix.io";
|
||||||
|
extra-trusted-public-keys = "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=";
|
||||||
|
};
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
treefmt-nix = {
|
treefmt-nix = {
|
||||||
url = "github:numtide/treefmt-nix";
|
url = "github:numtide/treefmt-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
@ -15,14 +17,39 @@
|
||||||
flake-parts.follows = "flake-parts";
|
flake-parts.follows = "flake-parts";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
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";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lanzaboote = {
|
||||||
|
url = "github:nix-community/lanzaboote/v0.4.2";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
fcc-unlock = {
|
||||||
|
url = "github:fabianhauser/fcc-unlock";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
catppuccin.url = "github:catppuccin/nix";
|
||||||
|
emanote = {
|
||||||
|
url = "github:srid/emanote";
|
||||||
|
inputs = {
|
||||||
|
emanote-template.follows = "";
|
||||||
|
nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
private.url = "git+file:./private";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
inputs@{ flake-parts, ... }:
|
inputs@{ flake-parts, nixpkgs, ... }:
|
||||||
flake-parts.lib.mkFlake { inherit inputs; } {
|
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
imports = map (name: inputs.${name}.flakeModule) [
|
imports = map (name: inputs.${name}.flakeModule) [
|
||||||
"treefmt-nix"
|
"treefmt-nix"
|
||||||
|
@ -32,17 +59,37 @@
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
];
|
];
|
||||||
perSystem =
|
perSystem =
|
||||||
{ ... }:
|
{ pkgs, lib, ... }:
|
||||||
{
|
{
|
||||||
treefmt.programs = {
|
treefmt = {
|
||||||
nixfmt.enable = true;
|
programs = {
|
||||||
deadnix.enable = true;
|
nixfmt.enable = true;
|
||||||
|
deadnix.enable = true;
|
||||||
|
};
|
||||||
|
settings.global.excludes = [ "*.jpg" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
devShells.default = pkgs.mkShell {
|
||||||
|
name = "nix-config-default-shell";
|
||||||
|
packages = lib.attrValues {
|
||||||
|
inherit (pkgs)
|
||||||
|
nixos-rebuild
|
||||||
|
sops
|
||||||
|
ssh-to-age
|
||||||
|
nixd
|
||||||
|
;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
ezConfigs = {
|
ezConfigs = {
|
||||||
root = ./.;
|
root = ./.;
|
||||||
globalArgs = { inherit inputs; };
|
globalArgs = { inherit inputs; };
|
||||||
|
nixos.hosts =
|
||||||
|
with nixpkgs.lib;
|
||||||
|
genAttrs [ "speer" "ochsenchopf" ] (const {
|
||||||
|
userHomeModules = [ "fhauser" ];
|
||||||
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
15
home-configurations/fhauser.nix
Normal file
15
home-configurations/fhauser.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
home =
|
||||||
|
let
|
||||||
|
username = "fhauser";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit username;
|
||||||
|
inherit (osConfig.system) stateVersion;
|
||||||
|
homeDirectory = osConfig.users.users.${username}.home;
|
||||||
|
};
|
||||||
|
}
|
4
home-modules/applications/catppuccin.nix
Normal file
4
home-modules/applications/catppuccin.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
catppuccin.flavor = "mocha";
|
||||||
|
}
|
12
home-modules/applications/codium.nix
Normal file
12
home-modules/applications/codium.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.vscode = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.vscodium;
|
||||||
|
extensions = with pkgs.vscode-extensions; [
|
||||||
|
mkhl.direnv
|
||||||
|
jnoortheen.nix-ide
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
126
home-modules/applications/default.nix
Normal file
126
home-modules/applications/default.nix
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./catppuccin.nix
|
||||||
|
./codium.nix
|
||||||
|
./emanote.nix
|
||||||
|
./evolution.nix
|
||||||
|
./firefox.nix
|
||||||
|
./gammastep.nix
|
||||||
|
./git.nix
|
||||||
|
./gpg.nix
|
||||||
|
./kanshi.nix
|
||||||
|
./kitty.nix
|
||||||
|
./mako.nix
|
||||||
|
./psql.nix
|
||||||
|
./scripts.nix
|
||||||
|
./shell.nix
|
||||||
|
./ssh.nix
|
||||||
|
./sway.nix
|
||||||
|
./swaylock.nix
|
||||||
|
./vim.nix
|
||||||
|
./waybar.nix
|
||||||
|
./webapps.nix
|
||||||
|
./zed-editor.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
network-manager-applet.enable = true;
|
||||||
|
nextcloud-client = {
|
||||||
|
enable = true;
|
||||||
|
startInBackground = true;
|
||||||
|
};
|
||||||
|
pasystray.enable = true;
|
||||||
|
blueman-applet.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
home = {
|
||||||
|
sessionVariables = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
};
|
||||||
|
packages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
# Networking
|
||||||
|
transmission_4 # GUI Tools, maybe extract...
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Desktop Environment Applications
|
||||||
|
google-chrome
|
||||||
|
chromium
|
||||||
|
nextcloud-client
|
||||||
|
xfce.thunar
|
||||||
|
xfce.thunar-archive-plugin
|
||||||
|
xfce.xfce4-appfinder
|
||||||
|
xfce.mousepad
|
||||||
|
bitwarden-desktop
|
||||||
|
pinentry-rofi # Required by gnupg
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# office
|
||||||
|
libreoffice-fresh # TODO: Dictionaries, nixos/nixpkgs#14430
|
||||||
|
tectonic
|
||||||
|
pandoc
|
||||||
|
texliveSmall
|
||||||
|
simple-scan
|
||||||
|
gnome-online-accounts
|
||||||
|
gnome-control-center
|
||||||
|
todoist-electron
|
||||||
|
obsidian
|
||||||
|
smile
|
||||||
|
qdigidoc
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Communication
|
||||||
|
jitsi-meet-electron
|
||||||
|
teams-for-linux
|
||||||
|
rdesktop
|
||||||
|
davinci-resolve
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Development
|
||||||
|
virt-manager
|
||||||
|
modemmanager # TODO: makes sense here?
|
||||||
|
modem-manager-gui
|
||||||
|
tealdeer
|
||||||
|
llm
|
||||||
|
];
|
||||||
|
|
||||||
|
#TODO: Write module
|
||||||
|
activation.statefulConfigSymlinks = config.lib.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
STATEFUL_ROOT="$HOME/.stateful"
|
||||||
|
if [ ! -d "$STATEFUL_ROOT" ]; then
|
||||||
|
$DRY_RUN_CMD mkdir "$STATEFUL_ROOT"
|
||||||
|
fi
|
||||||
|
|
||||||
|
STATEFUL_CONFS=(
|
||||||
|
".config/spotify"
|
||||||
|
".mozilla"
|
||||||
|
".password-store"
|
||||||
|
)
|
||||||
|
for STATEFUL_CONF in ''${STATEFUL_CONFS[@]}; do
|
||||||
|
if [ -e "$STATEFUL_CONF" ] && [ ! -h "$STATEFUL_CONF" ]; then
|
||||||
|
echo "File $STATEFUL_CONF already exists, exiting!" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -h "$STATEFUL_CONF" ]; then
|
||||||
|
$DRY_RUN_CMD rm "$STATEFUL_CONF"
|
||||||
|
fi
|
||||||
|
|
||||||
|
STATEFUL_CONF_DIR="$STATEFUL_ROOT/$STATEFUL_CONF"
|
||||||
|
$DRY_RUN_CMD mkdir -p "$STATEFUL_CONF_DIR"
|
||||||
|
$DRY_RUN_CMD ln -s $VERBOSE_ARG "$STATEFUL_CONF_DIR" "$HOME/$STATEFUL_CONF"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
17
home-modules/applications/emanote.nix
Normal file
17
home-modules/applications/emanote.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.emanote.homeManagerModule
|
||||||
|
];
|
||||||
|
services.emanote = {
|
||||||
|
enable = true;
|
||||||
|
host = "127.0.0.1";
|
||||||
|
port = 7000;
|
||||||
|
notes = [
|
||||||
|
"/home/fhauser/cloud/Notes"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
4
home-modules/applications/evolution.nix
Normal file
4
home-modules/applications/evolution.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
dconf.settings."org/gnome/evolution-data-server/calendar".notify-enable-audio = false;
|
||||||
|
}
|
11
home-modules/applications/firefox.nix
Normal file
11
home-modules/applications/firefox.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.firefox;
|
||||||
|
};
|
||||||
|
home.sessionVariables = {
|
||||||
|
MOZ_ENABLE_WAYLAND = "true";
|
||||||
|
MOZ_DBUS_REMOTE = "1";
|
||||||
|
};
|
||||||
|
}
|
14
home-modules/applications/gammastep.nix
Normal file
14
home-modules/applications/gammastep.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
services.gammastep = {
|
||||||
|
enable = true;
|
||||||
|
settings.general.brightness-night = "0.9";
|
||||||
|
|
||||||
|
temperature.day = 6300;
|
||||||
|
temperature.night = 5500;
|
||||||
|
|
||||||
|
latitude = "47.2";
|
||||||
|
longitude = "8.8";
|
||||||
|
tray = true;
|
||||||
|
};
|
||||||
|
}
|
104
home-modules/applications/git.nix
Normal file
104
home-modules/applications/git.nix
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
git-absorb
|
||||||
|
git-trim
|
||||||
|
];
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.gitAndTools.gitFull;
|
||||||
|
aliases = {
|
||||||
|
s = "status --short --branch";
|
||||||
|
a = "add --patch";
|
||||||
|
c = "commit --message";
|
||||||
|
l = "log --color --graph --pretty=format:'%Cred%h%Creset - %C(bold)%s%Creset%C(yellow)%d%Creset %C(green)%an%Creset %C(cyan)%cr%Creset (S: %G?)' --abbrev-commit";
|
||||||
|
d = "diff";
|
||||||
|
|
||||||
|
fup = "commit --fixup";
|
||||||
|
fuprebase = "rebase --interactive --autosquash";
|
||||||
|
|
||||||
|
ignore = "update-index --skip-worktree";
|
||||||
|
unignore = "update-index --no-skip-worktree";
|
||||||
|
ignored = ''!git ls-files -v | grep "^S"'';
|
||||||
|
};
|
||||||
|
#delta = {
|
||||||
|
# enable = true;
|
||||||
|
# catppuccin.enable = true;
|
||||||
|
# options = {
|
||||||
|
# side-by-side = "true";
|
||||||
|
|
||||||
|
# line-numbers = "true";
|
||||||
|
# line-numbers-minus-style = "#444444";
|
||||||
|
# line-numbers-zero-style = "#444444";
|
||||||
|
# line-numbers-plus-style = "#444444";
|
||||||
|
# line-numbers-left-format = "{nm:>4}┊";
|
||||||
|
# line-numbers-right-format = "{np:>4}│";
|
||||||
|
# line-numbers-left-style = "blue";
|
||||||
|
# line-numbers-right-style = "blue";
|
||||||
|
# };
|
||||||
|
#};
|
||||||
|
extraConfig = {
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
core = {
|
||||||
|
packedGitWindowSize = "16m";
|
||||||
|
packedGitLimit = "64m";
|
||||||
|
};
|
||||||
|
pack = {
|
||||||
|
windowMemory = "64m";
|
||||||
|
packSizeLimit = "64m";
|
||||||
|
thread = "1";
|
||||||
|
deltaCacheSize = "1m";
|
||||||
|
};
|
||||||
|
color = {
|
||||||
|
branch = "auto";
|
||||||
|
diff = "auto";
|
||||||
|
status = "auto";
|
||||||
|
};
|
||||||
|
push = {
|
||||||
|
default = "current";
|
||||||
|
autoSetupRemote = true;
|
||||||
|
};
|
||||||
|
pull.rebase = "true";
|
||||||
|
branch.autosetuprebase = "always";
|
||||||
|
log.follow = true;
|
||||||
|
rerere.enabled = true;
|
||||||
|
fetch.recurseSubmodules = "on-demand";
|
||||||
|
credential.helper = [
|
||||||
|
"libsecret"
|
||||||
|
"cache --timeout 21600"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
ignores = [
|
||||||
|
"*~"
|
||||||
|
"*.swp"
|
||||||
|
".direnv/"
|
||||||
|
];
|
||||||
|
lfs.enable = true;
|
||||||
|
includes =
|
||||||
|
let
|
||||||
|
mkConfig = (
|
||||||
|
dir: {
|
||||||
|
condition = "gitdir:${dir}";
|
||||||
|
contents = {
|
||||||
|
user = {
|
||||||
|
signingkey = "0x8A52A140BEBF7D2C";
|
||||||
|
email = "fabian@fh2.ch";
|
||||||
|
name = "Fabian Hauser";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
map mkConfig [
|
||||||
|
"~/private/"
|
||||||
|
"~/projects/"
|
||||||
|
"/etc/nixos/"
|
||||||
|
"~/.password-store/"
|
||||||
|
"~/.stateful/"
|
||||||
|
"~/shares/cloud.qo.is/"
|
||||||
|
"~/shares/drive.switch.ch/"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
programs.git-credential-oauth.enable = true;
|
||||||
|
}
|
86
home-modules/applications/gpg.nix
Normal file
86
home-modules/applications/gpg.nix
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
#TODO: ENV variabls for agent
|
||||||
|
programs.gpg = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.gnupg;
|
||||||
|
settings = {
|
||||||
|
"use-agent" = true;
|
||||||
|
"trust-model" = "tofu";
|
||||||
|
"no-emit-version" = true;
|
||||||
|
"no-comments" = true;
|
||||||
|
"sig-notation" = "issuer-fpr@notations.openpgp.fifthhorseman.net=%g";
|
||||||
|
"keyserver" = "hkps://keys.openpgp.org";
|
||||||
|
"keyserver-options" = "auto-key-retrieve no-honor-keyserver-url";
|
||||||
|
"personal-cipher-preferences" = "AES256 AES192 AES CAST5";
|
||||||
|
"cert-digest-algo" = "SHA512";
|
||||||
|
"personal-digest-preferences" = "SHA512 SHA384 SHA256 SHA224";
|
||||||
|
"default-preference-list" =
|
||||||
|
"SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed";
|
||||||
|
"display-charset" = "utf-8";
|
||||||
|
"fixed-list-mode" = true;
|
||||||
|
"with-fingerprint" = true;
|
||||||
|
"keyid-format" = "0xlong";
|
||||||
|
"verify-options" = "show-uid-validity";
|
||||||
|
"list-options" = "show-uid-validity";
|
||||||
|
};
|
||||||
|
scdaemonSettings = {
|
||||||
|
disable-ccid = true;
|
||||||
|
};
|
||||||
|
# TODO: Complete this list and maybe transfer to managed configuration?
|
||||||
|
#publicKeys = [
|
||||||
|
# { source = "./fabian.hauser@qo.is.pub"; trust = 5; }
|
||||||
|
#];
|
||||||
|
};
|
||||||
|
services.gpg-agent = {
|
||||||
|
enable = true;
|
||||||
|
enableScDaemon = true;
|
||||||
|
enableSshSupport = true;
|
||||||
|
enableExtraSocket = true;
|
||||||
|
# TODO: pinentryPackage =
|
||||||
|
extraConfig =
|
||||||
|
let
|
||||||
|
pinentryBemenu = pkgs.writeShellApplication {
|
||||||
|
name = "pinentry-bemenu-with-env";
|
||||||
|
text = ''
|
||||||
|
PATH="$PATH:${pkgs.coreutils}/bin:${pkgs.bemenu}/bin"
|
||||||
|
"${pkgs.pinentry-bemenu}/bin/pinentry-bemenu" "$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
''
|
||||||
|
pinentry-program ${pinentryBemenu}/bin/pinentry-bemenu-with-env
|
||||||
|
'';
|
||||||
|
sshKeys = [
|
||||||
|
"638143D3F6421377E9D4C7F1D2EDC5AA0A860351" # 0x3E957C9C8CB5D6B2 / fabian.hauser@qo.is
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.sockets.yubikey-touch-detector = {
|
||||||
|
Unit.Description = "Unix socket activation for YubiKey touch detector service";
|
||||||
|
Socket = {
|
||||||
|
ListenStream = "%t/yubikey-touch-detector.socket";
|
||||||
|
RemoveOnStop = true;
|
||||||
|
};
|
||||||
|
Install.WantedBy = [ "sockets.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.yubikey-touch-detector = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Detects when your YubiKey is waiting for a touch";
|
||||||
|
Requires = "yubikey-touch-detector.socket";
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${lib.getExe pkgs.yubikey-touch-detector} --libnotify";
|
||||||
|
EnvironmentFile = "-%E/yubikey-touch-detector/service.conf";
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
Also = "yubikey-touch-detector.socket";
|
||||||
|
WantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
87
home-modules/applications/kanshi.nix
Normal file
87
home-modules/applications/kanshi.nix
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# systemd.user.services.kanshi.Install.WantedBy = "home-manager-fhauser.service"; # TODO: Upstream array type of systemdTarget
|
||||||
|
services.kanshi = {
|
||||||
|
enable = true;
|
||||||
|
settings =
|
||||||
|
let
|
||||||
|
mkScreen = display: position: {
|
||||||
|
inherit (display.output) criteria;
|
||||||
|
inherit position;
|
||||||
|
status = "enable";
|
||||||
|
};
|
||||||
|
mkProfile = name: outputs: {
|
||||||
|
profile = {
|
||||||
|
inherit name outputs;
|
||||||
|
exec = backgroundCommand;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# Can be applied by profile.exec
|
||||||
|
backgroundPicturePath = "~/shares/cloud.qo.is/pictures/backgrounds";
|
||||||
|
backgroundCommand = ''
|
||||||
|
${pkgs.sway}/bin/swaymsg "output * bg `find ${backgroundPicturePath} -type f | shuf -n 1` fill"
|
||||||
|
'';
|
||||||
|
|
||||||
|
screens = {
|
||||||
|
x1-screen.output = {
|
||||||
|
criteria = "California Institute of Technology 0x1404 Unknown";
|
||||||
|
scale = null;
|
||||||
|
};
|
||||||
|
tallinn-4k.output = {
|
||||||
|
criteria = "HP Inc. HP Z27 CN482201RP";
|
||||||
|
scale = 1.2;
|
||||||
|
};
|
||||||
|
chur-dell.output = {
|
||||||
|
criteria = "Dell Inc. DELL P2720DC 22JPK53";
|
||||||
|
scale = null;
|
||||||
|
};
|
||||||
|
chur-small.output = {
|
||||||
|
criteria = "Eizo Nanao Corporation EV2450 92395086";
|
||||||
|
scale = null;
|
||||||
|
};
|
||||||
|
tallinn-thinkvision.output = {
|
||||||
|
criteria = "Lenovo Group Limited LEN P24h-20 V307DA61";
|
||||||
|
scale = null;
|
||||||
|
};
|
||||||
|
tallinn-tv.output = {
|
||||||
|
criteria = "Samsung Electric Company SAMSUNG 0x01000E00";
|
||||||
|
scale = 2.0;
|
||||||
|
};
|
||||||
|
walrueti-buero.output = {
|
||||||
|
criteria = "Dell Inc. DELL U2719D 12DGV13";
|
||||||
|
scale = null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
with lib;
|
||||||
|
(attrValues screens)
|
||||||
|
++ (with screens; [
|
||||||
|
(mkProfile "mobile-only" [
|
||||||
|
(mkScreen x1-screen "0,0")
|
||||||
|
])
|
||||||
|
(mkProfile "desktop-oly" [
|
||||||
|
(mkScreen tallinn-4k "0,0")
|
||||||
|
])
|
||||||
|
(mkProfile "home-dock" [
|
||||||
|
(mkScreen x1-screen "0,120")
|
||||||
|
(mkScreen tallinn-4k "1920,0")
|
||||||
|
])
|
||||||
|
(mkProfile "saba-desk" [
|
||||||
|
(mkScreen x1-screen "0,0")
|
||||||
|
(mkScreen tallinn-thinkvision "1920,0")
|
||||||
|
])
|
||||||
|
(mkProfile "tv" [
|
||||||
|
((mkScreen x1-screen "0,0") // { status = "disable"; })
|
||||||
|
(mkScreen tallinn-tv "0,0")
|
||||||
|
])
|
||||||
|
(mkProfile "walrueti" [
|
||||||
|
(mkScreen x1-screen "0,0")
|
||||||
|
(mkScreen walrueti-buero "1920,0")
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
}
|
8
home-modules/applications/kitty.nix
Normal file
8
home-modules/applications/kitty.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
settings.term = "xterm";
|
||||||
|
};
|
||||||
|
catppuccin.kitty.enable = true;
|
||||||
|
}
|
16
home-modules/applications/mako.nix
Normal file
16
home-modules/applications/mako.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
services.mako = {
|
||||||
|
enable = true;
|
||||||
|
#backgroundColor = "#CCCCCCCC"; # TODO: Make layout colors in a central place
|
||||||
|
borderSize = 0;
|
||||||
|
#borderColor = "#4C7899FF";
|
||||||
|
defaultTimeout = 1500;
|
||||||
|
#ignoreTimeout = true;
|
||||||
|
#textColor = "#FFFFFFFF";
|
||||||
|
#width = 300;
|
||||||
|
#height = 100;
|
||||||
|
#font = "monospace 10";
|
||||||
|
}; # TODO
|
||||||
|
catppuccin.mako.enable = true;
|
||||||
|
}
|
BIN
home-modules/applications/mountain.jpg
Normal file
BIN
home-modules/applications/mountain.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 MiB |
21
home-modules/applications/psql.nix
Normal file
21
home-modules/applications/psql.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
home.file.".psqlrc".text = ''
|
||||||
|
\set QUIET 1
|
||||||
|
|
||||||
|
\pset linestyle unicode
|
||||||
|
\pset border 2
|
||||||
|
|
||||||
|
\set null [null]
|
||||||
|
\set COMP_KEYWORD_CASE upper
|
||||||
|
\set ON_ERROR_ROLLBACK interactive
|
||||||
|
\set PROMPT1 '%[%033[1m%]%M/%/%R%[%033[0m%]%# '
|
||||||
|
\set PROMPT2 ''''
|
||||||
|
\set VERBOSITY verbose
|
||||||
|
\timing
|
||||||
|
\x auto
|
||||||
|
|
||||||
|
\unset QUIET
|
||||||
|
\conninfo
|
||||||
|
'';
|
||||||
|
}
|
66
home-modules/applications/scripts.nix
Normal file
66
home-modules/applications/scripts.nix
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
suspend = pkgs.writeScriptBin "suspend" ''
|
||||||
|
#!${pkgs.stdenv.shell}
|
||||||
|
${pkgs.systemd}/bin/systemctl suspend
|
||||||
|
'';
|
||||||
|
passbemenu = pkgs.writeScriptBin "passbemenu" ''
|
||||||
|
#!${pkgs.stdenv.shell}
|
||||||
|
shopt -s nullglob globstar
|
||||||
|
|
||||||
|
typeit=0
|
||||||
|
if [[ $1 == "--type" ]]; then
|
||||||
|
typeit=1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
export BEMENU_BACKEND=wayland
|
||||||
|
|
||||||
|
prefix=''${PASSWORD_STORE_DIR-~/.password-store}
|
||||||
|
password_files=( $(find -L "$prefix" -type f -name '*.gpg') )
|
||||||
|
password_files=( "''${password_files[@]#"$prefix"/}" )
|
||||||
|
password_files=( "''${password_files[@]%.gpg}" )
|
||||||
|
|
||||||
|
password=$(printf '%s\n' "''${password_files[@]}" | \
|
||||||
|
${pkgs.bemenu}/bin/bemenu --list 20 --ignorecase --prompt 'Pass: ' "$@")
|
||||||
|
|
||||||
|
[[ -n $password ]] || exit
|
||||||
|
|
||||||
|
password_value=$(${pkgs.pass-wayland}/bin/pass show "$password" | tail -1 2>/dev/null)
|
||||||
|
${pkgs.wtype}/bin/wtype "''${password_value}"
|
||||||
|
'';
|
||||||
|
bt-connect = pkgs.writeShellApplication {
|
||||||
|
name = "bt";
|
||||||
|
meta.description = "Connect known Bluetooth device";
|
||||||
|
runtimeInputs = [ pkgs.bluez ];
|
||||||
|
text = ''
|
||||||
|
COMMAND="connect"
|
||||||
|
if [[ $1 == "--disconnect" ]]; then
|
||||||
|
COMMAND="disconnect"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEVICE="";
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
headset)
|
||||||
|
DEVICE="88:C9:E8:7A:11:C2"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown Device" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exec bluetoothctl $COMMAND $DEVICE
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
passbemenu
|
||||||
|
suspend
|
||||||
|
bt-connect
|
||||||
|
];
|
||||||
|
}
|
72
home-modules/applications/shell.nix
Normal file
72
home-modules/applications/shell.nix
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
bash = {
|
||||||
|
enable = true;
|
||||||
|
historyIgnore = [
|
||||||
|
"ls"
|
||||||
|
"cd"
|
||||||
|
"exit"
|
||||||
|
"j"
|
||||||
|
];
|
||||||
|
shellAliases = {
|
||||||
|
# Sane defaults
|
||||||
|
l = "ls -lah";
|
||||||
|
cp = "cp --reflink=auto";
|
||||||
|
pwgen = "pwgen -c -n -s -N 30";
|
||||||
|
bc = "bc --mathlib";
|
||||||
|
cal = "cal -m";
|
||||||
|
curl = "curl -L";
|
||||||
|
ack = "rg";
|
||||||
|
|
||||||
|
# Git helpers
|
||||||
|
git-fetch-pr = "git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'";
|
||||||
|
git-config-fetchall = ''git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"'';
|
||||||
|
|
||||||
|
git-enable-signing = "git config commit.gpgsign true && git config tag.gpgsign true";
|
||||||
|
# Common Typos
|
||||||
|
gits = "git s";
|
||||||
|
};
|
||||||
|
initExtra = ''
|
||||||
|
function o(){
|
||||||
|
xdg-open "$*" >/dev/null 2>&1 &
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
shellOptions = [
|
||||||
|
"autocd"
|
||||||
|
"checkjobs"
|
||||||
|
"dotglob"
|
||||||
|
"globstar"
|
||||||
|
"histappend"
|
||||||
|
];
|
||||||
|
sessionVariables = {
|
||||||
|
#TODO: Some of these should be migrated to the according application.
|
||||||
|
GPG_TTY = "$(tty)";
|
||||||
|
PGDATABASE = "postgres";
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
autojump = {
|
||||||
|
enable = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
};
|
||||||
|
powerline-go = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
hostname-only-if-ssh = true;
|
||||||
|
numeric-exit-codes = true;
|
||||||
|
colorize-hostname = true;
|
||||||
|
cwd-max-depth = 4;
|
||||||
|
cwd-max-dir-size = 48;
|
||||||
|
cwd-mode = "semifancy";
|
||||||
|
modules = "ssh,host,root,cwd,perms,dotenv,venv,nix-shell,git,jobs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
26
home-modules/applications/ssh.nix
Normal file
26
home-modules/applications/ssh.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.ssh =
|
||||||
|
let
|
||||||
|
forceIdentityPrivate = {
|
||||||
|
identityFile = toString (
|
||||||
|
pkgs.writeText "fabian.hauser@qo.is.pub" ''
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIPF8ZV7vhpbVvLxiKq8ANVusNUHMbtii5MuvjxCbVz7vSNVPo9OOLvYyDqhbRAWMTdQeGZVAaALBufKKmprDTRFMpnA7Ut4TFrdz/5DTaR2KEjJ7P75moH+0xooR/GsbzFGsNBSQSXK3u1igndPYEC/PqCHN++32kDo2wLqTB4VLrEovU3iq8BMckn329Bu1fGbXKTgDpEvUEEwFO2brQZLMmzILGF/v4B9ImEGtinAUNgDSfEpgPN23sdWQH9rwEClGv95JmWNf05tuVomhZzOBtCFoAno3XB1nj16avjsqJ3aGFY2CCcfsNrwKzhIotmm82bcI4BJuJIVRIKbZ1 cardno:000610954665
|
||||||
|
''
|
||||||
|
);
|
||||||
|
identitiesOnly = true;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
matchBlocks = {
|
||||||
|
"github.com" = forceIdentityPrivate // {
|
||||||
|
user = "git";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
IdentityAgent /run/user/1000/gnupg/S.gpg-agent.ssh
|
||||||
|
'';
|
||||||
|
#TODO: Authorized keys implementation, see https://github.com/nix-community/home-manager/pull/9
|
||||||
|
};
|
||||||
|
}
|
171
home-modules/applications/sway.nix
Normal file
171
home-modules/applications/sway.nix
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
adhereTheSwayTarget = {
|
||||||
|
Install.WantedBy = lib.mkForce [ "sway-session.target" ];
|
||||||
|
Unit.PartOf = lib.mkForce [ "sway-session.target" ];
|
||||||
|
};
|
||||||
|
# TODO: active screen with -m $active_screen
|
||||||
|
bemenuLauncher = pkgs.writeScriptBin "bemenuLauncher" ''
|
||||||
|
#!${pkgs.stdenv.shell}
|
||||||
|
#active_screen=$(swaymsg -r -t get_outputs | \
|
||||||
|
# ${pkgs.jq}/bin/jq '. [] | select (.focused == true) | .name | split ("-") | last')
|
||||||
|
${pkgs.dmenu}/bin/dmenu_path | \
|
||||||
|
${pkgs.bemenu}/bin/bemenu --list 20 --ignorecase --prompt 'Start: ' | \
|
||||||
|
xargs swaymsg exec --
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
rec {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
sway-contrib.grimshot
|
||||||
|
wl-clipboard
|
||||||
|
libappindicator
|
||||||
|
adwaita-icon-theme
|
||||||
|
gnome-icon-theme
|
||||||
|
hicolor-icon-theme # TODO: Move these requirements?
|
||||||
|
fuzzel # Required for rofimoji
|
||||||
|
];
|
||||||
|
|
||||||
|
xsession.preferStatusNotifierItems = true;
|
||||||
|
|
||||||
|
wayland.windowManager.sway = {
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
xwayland = true;
|
||||||
|
wrapperFeatures = {
|
||||||
|
gtk = true;
|
||||||
|
};
|
||||||
|
extraSessionCommands = ''
|
||||||
|
#export XDG_CURRENT_DESKTOP=Unity
|
||||||
|
export XDG_CURRENT_DESKTOP=sway
|
||||||
|
export XDG_SESSION_TYPE="wayland"
|
||||||
|
export _JAVA_AWT_WM_NONREPARENTING=1
|
||||||
|
export QT_QPA_PLATFORM=wayland
|
||||||
|
export QT_WAYLAND_DISABLE_WINDOWDECORATION="1"
|
||||||
|
# TODO: QTpie
|
||||||
|
export WLR_DRM_NO_MODIFIERS=1
|
||||||
|
export WLR_NO_HARDWARE_CURSORS=1
|
||||||
|
'';
|
||||||
|
config = {
|
||||||
|
input = {
|
||||||
|
"type:keyboard" = {
|
||||||
|
xkb_layout = "ch,de";
|
||||||
|
xkb_options = "eurosign:e";
|
||||||
|
};
|
||||||
|
"*" = {
|
||||||
|
xkb_numlock = "enable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
terminal = "${pkgs.kitty}/bin/kitty";
|
||||||
|
menu = "${bemenuLauncher}/bin/bemenuLauncher";
|
||||||
|
gaps.inner = 8;
|
||||||
|
modifier = "Mod4";
|
||||||
|
window.border = 0;
|
||||||
|
#colors.focused.border = "#323232";
|
||||||
|
|
||||||
|
#TODO: Workspace Programm assignment: Not working properly
|
||||||
|
assigns = {
|
||||||
|
"10" = [ { app_id = "^firefox$"; } ];
|
||||||
|
"11" = [ { app_id = "^(claws-mail|thunderbird|evolution)$"; } ];
|
||||||
|
"12" = [
|
||||||
|
{
|
||||||
|
class = "^Chromium-browser$";
|
||||||
|
instance = "^web.threema.ch";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
"13" = [ { class = "^Spotify$"; } ];
|
||||||
|
};
|
||||||
|
|
||||||
|
keybindings =
|
||||||
|
let
|
||||||
|
mod = wayland.windowManager.sway.config.modifier;
|
||||||
|
playerctl = "${pkgs.playerctl}/bin/playerctl";
|
||||||
|
wpctl = "${pkgs.wireplumber}/bin/wpctl";
|
||||||
|
light = "${pkgs.light}/bin/light";
|
||||||
|
in
|
||||||
|
lib.mkOptionDefault {
|
||||||
|
"${mod}+p" = "exec passbemenu";
|
||||||
|
"${mod}+Shift+d" = "exec ${pkgs.rofimoji}/bin/rofimoji --action clipboard --selector fuzzel";
|
||||||
|
"${mod}+x" = "move workspace to output right";
|
||||||
|
"${mod}+y" = "move workspace to output left";
|
||||||
|
|
||||||
|
"${mod}+section" = "workspace 0";
|
||||||
|
"${mod}+0" = "workspace 10";
|
||||||
|
"${mod}+apostrophe" = "workspace 11";
|
||||||
|
"${mod}+dead_circumflex" = "workspace 12";
|
||||||
|
"${mod}+dead_diaeresis" = "workspace 13";
|
||||||
|
"${mod}+dollar" = "workspace 14";
|
||||||
|
|
||||||
|
"${mod}+Shift+section" = "move container to workspace 0";
|
||||||
|
"${mod}+Shift+0" = "move container to workspace 10";
|
||||||
|
"${mod}+Shift+apostrophe" = "move container to workspace 11";
|
||||||
|
"${mod}+Shift+dead_circumflex" = "move container to workspace 12";
|
||||||
|
"${mod}+Shift+dead_diaeresis" = "move container to workspace 13";
|
||||||
|
"${mod}+Shift+dollar" = "move container to workspace 14";
|
||||||
|
|
||||||
|
"Ctrl+mod1+l" = "exec ${pkgs.systemd}/bin/loginctl lock-session";
|
||||||
|
"Ctrl+mod1+Shift+L" = "exec ${pkgs.systemd}/bin/systemctl suspend";
|
||||||
|
|
||||||
|
# pulse audio volume control
|
||||||
|
XF86AudioLowerVolume = "exec ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 3%-";
|
||||||
|
XF86AudioRaiseVolume = "exec ${wpctl} set-volume @DEFAULT_AUDIO_SINK@ 3%+";
|
||||||
|
XF86AudioMute = "exec ${wpctl} set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
||||||
|
XF86AudioMicMute = "exec ${wpctl} set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
||||||
|
|
||||||
|
# Spotify control
|
||||||
|
XF86AudioPause = "exec ${playerctl} play-pause";
|
||||||
|
XF86AudioPlay = "exec ${playerctl} play-pause";
|
||||||
|
XF86AudioNext = "exec ${playerctl} next";
|
||||||
|
XF86AudioPrev = "exec ${playerctl} previous";
|
||||||
|
|
||||||
|
# screen brightness
|
||||||
|
XF86MonBrightnessUp = "exec ${light} -A 10";
|
||||||
|
XF86MonBrightnessDown = "exec ${light} -U 5";
|
||||||
|
|
||||||
|
# screenshot
|
||||||
|
Print = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot copy area";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
# Disable the laptop screen when the lid is closed.
|
||||||
|
bindswitch --reload lid:on output eDP-1 disable
|
||||||
|
bindswitch --reload lid:off output eDP-1 enable
|
||||||
|
|
||||||
|
# Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1338554
|
||||||
|
for_window [app_id="^chrome-.*-.*$"] shortcuts_inhibitor disable
|
||||||
|
|
||||||
|
output "*" bg ${./mountain.jpg} fill
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
catppuccin.sway.enable = true;
|
||||||
|
|
||||||
|
systemd.user.services.network-manager-applet = adhereTheSwayTarget;
|
||||||
|
systemd.user.services.nextcloud-client = adhereTheSwayTarget // {
|
||||||
|
# For trayicon to work:
|
||||||
|
Unit.After = lib.mkForce [ "waybar.service" ];
|
||||||
|
Service = {
|
||||||
|
ExecStartPre = "${pkgs.coreutils}/bin/sleep 3";
|
||||||
|
Environment = lib.mkForce "PATH=${config.home.profileDirectory}/bin XDG_CURRENT_DESKTOP=Unity";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.user.services.pasystray = adhereTheSwayTarget;
|
||||||
|
|
||||||
|
gtk = {
|
||||||
|
iconTheme = {
|
||||||
|
# package = pkgs.gnome-icon-theme;
|
||||||
|
# name = "gnome";
|
||||||
|
package = pkgs.hicolor_icon_theme;
|
||||||
|
name = "hicolor";
|
||||||
|
};
|
||||||
|
gtk3.extraConfig.gtk-menu-images = true;
|
||||||
|
};
|
||||||
|
catppuccin.gtk.enable = true;
|
||||||
|
|
||||||
|
dconf.settings = {
|
||||||
|
"org/gnome/desktop/interface".menus-have-icons = true;
|
||||||
|
};
|
||||||
|
}
|
36
home-modules/applications/swaylock.nix
Normal file
36
home-modules/applications/swaylock.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
systemd.user.services.swayidle =
|
||||||
|
let
|
||||||
|
lock = "${pkgs.swaylock}/bin/swaylock --hide-keyboard-layout --daemonize --show-failed-attempts --color=000000";
|
||||||
|
logTimeCmd = "${pkgs.coreutils}/bin/date --rfc-3339=seconds >> ~/locklog";
|
||||||
|
idleCmd = (action: ''${pkgs.sway}/bin/swaymsg "output * dpms ${action}" && ${logTimeCmd}'');
|
||||||
|
timeout-screens-off = 600;
|
||||||
|
timeout-lock = 630;
|
||||||
|
timeout-suspend = 1800;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
Unit = {
|
||||||
|
Description = "Idle Manager for Wayland";
|
||||||
|
Documentation = [ "man:swayidle(1)" ];
|
||||||
|
PartOf = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
Environment = "PATH=${pkgs.bash}/bin";
|
||||||
|
ExecStart = ''
|
||||||
|
${pkgs.swayidle}/bin/swayidle -w -d \
|
||||||
|
timeout ${toString timeout-lock} '${lock}' \
|
||||||
|
timeout ${toString timeout-screens-off} '${idleCmd "off"}' \
|
||||||
|
resume '${idleCmd "on"}' \
|
||||||
|
timeout ${toString timeout-suspend} '${pkgs.systemd}/bin/systemctl suspend' \
|
||||||
|
lock '${lock}' \
|
||||||
|
before-sleep '${lock}';
|
||||||
|
''; # TODO: Make this configurable and add home-manager module. (Requires sway with systemd-target support)
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "sway-session.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
catppuccin.swaylock.enable = true;
|
||||||
|
}
|
58
home-modules/applications/vim.nix
Normal file
58
home-modules/applications/vim.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
vimdiffAlias = true;
|
||||||
|
extraConfig = ''
|
||||||
|
" colorscheme elflord
|
||||||
|
set autoindent
|
||||||
|
set ruler
|
||||||
|
set pastetoggle=<F2>
|
||||||
|
set splitbelow
|
||||||
|
set splitright
|
||||||
|
set mouse=
|
||||||
|
set hidden
|
||||||
|
set expandtab
|
||||||
|
|
||||||
|
set tabstop=2
|
||||||
|
set softtabstop=2
|
||||||
|
|
||||||
|
set listchars="eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣"
|
||||||
|
set grepprg=ack\ -k
|
||||||
|
|
||||||
|
set statusline+=%{SyntasticStatuslineFlag()}
|
||||||
|
set statusline+=%*
|
||||||
|
|
||||||
|
let g:syntastic_always_populate_loc_list = 1
|
||||||
|
let g:syntastic_auto_loc_list = 1
|
||||||
|
let g:syntastic_check_on_open = 1
|
||||||
|
let g:syntastic_check_on_wq = 0
|
||||||
|
let g:syntastic_mode_map = { 'mode': 'passive', 'active_filetypes': [],'passive_filetypes': [] }
|
||||||
|
"nnoremap <C-w>E :SyntasticCheck<CR> :SyntasticToggleMode<CR>
|
||||||
|
|
||||||
|
" Rust
|
||||||
|
"let g:rustfmt_autosave = 1
|
||||||
|
let g:racer_cmd="~/.cargo/bin/racer"
|
||||||
|
"let g:racer_experimental_completer = 1
|
||||||
|
au FileType rust nmap gd <Plug>(rust-def)
|
||||||
|
au FileType rust nmap gs <Plug>(rust-def-split)
|
||||||
|
au FileType rust nmap gx <Plug>(rust-def-vertical)
|
||||||
|
au FileType rust nmap <leader>gd <Plug>(rust-doc)
|
||||||
|
|
||||||
|
" Typescript
|
||||||
|
au BufRead,BufNewFile *.ts setfiletype typescript
|
||||||
|
|
||||||
|
" Options
|
||||||
|
filetype plugin indent on
|
||||||
|
syntax on
|
||||||
|
'';
|
||||||
|
plugins = with pkgs.vimPlugins; [
|
||||||
|
vim-sensible
|
||||||
|
vim-airline
|
||||||
|
];
|
||||||
|
};
|
||||||
|
catppuccin.nvim.enable = true;
|
||||||
|
}
|
348
home-modules/applications/waybar.nix
Normal file
348
home-modules/applications/waybar.nix
Normal file
|
@ -0,0 +1,348 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
xsession.preferStatusNotifierItems = true;
|
||||||
|
wayland.windowManager.sway.config.bars = [ ];
|
||||||
|
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd = {
|
||||||
|
enable = true;
|
||||||
|
target = "tray.target";
|
||||||
|
};
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
position = "top";
|
||||||
|
#height =
|
||||||
|
modules-left = [
|
||||||
|
"sway/mode"
|
||||||
|
"sway/workspaces"
|
||||||
|
];
|
||||||
|
modules-center = [ "sway/window" ];
|
||||||
|
modules-right = [
|
||||||
|
"idle_inhibitor"
|
||||||
|
"backlight"
|
||||||
|
"battery"
|
||||||
|
"pulseaudio"
|
||||||
|
"tray"
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
backlight.format = " {percent}%";
|
||||||
|
disk.format = " {percentage_used}%";
|
||||||
|
clock.format = "{:%Y-%m-%d %H:%M}";
|
||||||
|
"sway/workspaces" = {
|
||||||
|
disable-scroll-wraparound = true;
|
||||||
|
enable-bar-scroll = true;
|
||||||
|
numeric-first = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = {
|
||||||
|
interval = 60;
|
||||||
|
states = {
|
||||||
|
warning = 15;
|
||||||
|
critical = 10;
|
||||||
|
};
|
||||||
|
format = " {capacity}% {time}"; # Icon: bolt
|
||||||
|
format-discharging = "{icon} {capacity}% {time}";
|
||||||
|
format-time = "{H}:{M}";
|
||||||
|
format-icons = [
|
||||||
|
"" # Icon: battery-full
|
||||||
|
"" # Icon: battery-three-quarters
|
||||||
|
"" # Icon: battery-half
|
||||||
|
"" # Icon: battery-quarter
|
||||||
|
"" # Icon: battery-empty
|
||||||
|
];
|
||||||
|
tooltip = "true";
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu = {
|
||||||
|
interval = "5";
|
||||||
|
format = " {usage}% ({load})"; # Icon: microchip
|
||||||
|
states = {
|
||||||
|
warning = "70";
|
||||||
|
critical = "90";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
memory = {
|
||||||
|
interval = "5";
|
||||||
|
format = " {}%"; # Icon: microchip
|
||||||
|
states = {
|
||||||
|
warning = "70";
|
||||||
|
critical = "90";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"sway/mode" = {
|
||||||
|
format = ''<span style="italic"> {}</span>''; # Icon: expand-arrows-alt
|
||||||
|
tooltip = "false";
|
||||||
|
};
|
||||||
|
|
||||||
|
"sway/window" = {
|
||||||
|
format = "{}";
|
||||||
|
max-length = "120";
|
||||||
|
};
|
||||||
|
|
||||||
|
"sway/workspaces" = {
|
||||||
|
all-outputs = false;
|
||||||
|
disable-scroll = true;
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
"10" = " 10";
|
||||||
|
"11" = " 11";
|
||||||
|
"12" = " 12";
|
||||||
|
"13" = " 13";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pulseaudio = {
|
||||||
|
scroll-step = 3;
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
format-bluetooth = "{icon} {volume}%";
|
||||||
|
format-muted = "🔇";
|
||||||
|
format-icons = {
|
||||||
|
headphones = "";
|
||||||
|
handsfree = "";
|
||||||
|
headset = "";
|
||||||
|
phone = "";
|
||||||
|
portable = "";
|
||||||
|
car = "";
|
||||||
|
default = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
};
|
||||||
|
on-click = "pavucontrol";
|
||||||
|
};
|
||||||
|
|
||||||
|
idle_inhibitor = {
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
activated = " active";
|
||||||
|
deactivated = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
tray = {
|
||||||
|
icon-size = "21";
|
||||||
|
spacing = "10";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
style = ''
|
||||||
|
/* =============================================================================
|
||||||
|
*
|
||||||
|
* Waybar configuration
|
||||||
|
*
|
||||||
|
* Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
|
||||||
|
*
|
||||||
|
* =========================================================================== */
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Keyframes
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
@keyframes blink-warning {
|
||||||
|
70% {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
color: white;
|
||||||
|
background-color: orange;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink-critical {
|
||||||
|
70% {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
color: white;
|
||||||
|
background-color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Base styles
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Reset all styles */
|
||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
min-height: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The whole bar */
|
||||||
|
#waybar {
|
||||||
|
background: #323232;
|
||||||
|
color: white;
|
||||||
|
/*font-family: Cantarell, Noto Sans, sans-serif;*/
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Each module */
|
||||||
|
#battery,
|
||||||
|
#clock,
|
||||||
|
#cpu,
|
||||||
|
#custom-keyboard-layout,
|
||||||
|
#memory,
|
||||||
|
#mode,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#temperature,
|
||||||
|
#backlight,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#tray {
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
/*border-right: solid 1px black;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#backlight {
|
||||||
|
margin-right: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#idle_inhibiter {
|
||||||
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* Module styles
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning.discharging {
|
||||||
|
animation-name: blink-warning;
|
||||||
|
animation-duration: 4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical.discharging {
|
||||||
|
animation-name: blink-critical;
|
||||||
|
animation-duration: 3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu {
|
||||||
|
/* No styles */
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu.warning {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu.critical {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory {
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory.warning {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory.critical {
|
||||||
|
color: red;
|
||||||
|
animation-name: blink-critical;
|
||||||
|
animation-duration: 2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mode {
|
||||||
|
background: #64727D;
|
||||||
|
border-top: 2px solid white;
|
||||||
|
/* To compensate for the top border and still have vertical centering */
|
||||||
|
padding-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
/* No styles */
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disconnected {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio {
|
||||||
|
/* No styles */
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.muted {
|
||||||
|
/* No styles */
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-spotify {
|
||||||
|
color: rgb(102, 220, 105);
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature {
|
||||||
|
/* No styles */
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature.critical {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
/* No styles */
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
border-top: 2px solid transparent;
|
||||||
|
/* To compensate for the top border and still have vertical centering */
|
||||||
|
padding-bottom: 2px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.focused {
|
||||||
|
border-color: #4c7899;
|
||||||
|
color: white;
|
||||||
|
background-color: #285577;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
border-color: #c9545d;
|
||||||
|
color: #c9545d;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
18
home-modules/applications/webapps.nix
Normal file
18
home-modules/applications/webapps.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
web-app =
|
||||||
|
name: url:
|
||||||
|
pkgs.writeScriptBin name ''
|
||||||
|
#!${pkgs.stdenv.shell}
|
||||||
|
exec ${pkgs.chromium}/bin/chromium --user-data-dir=$HOME/.config/chromium-app-${name} --app="${url}"
|
||||||
|
'';
|
||||||
|
whatsapp = web-app "whatsapp" "https://web.whatsapp.com/";
|
||||||
|
threema = web-app "threema" "https://web-beta.threema.ch/";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
home.packages = [
|
||||||
|
whatsapp
|
||||||
|
threema
|
||||||
|
];
|
||||||
|
}
|
53
home-modules/applications/zed-editor.nix
Normal file
53
home-modules/applications/zed-editor.nix
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.zed-editor = {
|
||||||
|
enable = true;
|
||||||
|
extensions = [
|
||||||
|
"nix"
|
||||||
|
"cspell"
|
||||||
|
"latex"
|
||||||
|
"sql"
|
||||||
|
"toml"
|
||||||
|
"plantuml"
|
||||||
|
|
||||||
|
"helm"
|
||||||
|
|
||||||
|
"html"
|
||||||
|
"svelte"
|
||||||
|
|
||||||
|
"java"
|
||||||
|
"kotlin"
|
||||||
|
|
||||||
|
];
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
nixd
|
||||||
|
nodePackages.cspell
|
||||||
|
direnv
|
||||||
|
];
|
||||||
|
userSettings = {
|
||||||
|
assistant = {
|
||||||
|
default_model = {
|
||||||
|
provider = "openai";
|
||||||
|
model = "o1-mini";
|
||||||
|
};
|
||||||
|
version = "2";
|
||||||
|
};
|
||||||
|
vim_mode = false;
|
||||||
|
ui_font_size = 16;
|
||||||
|
buffer_font_size = 16;
|
||||||
|
theme = {
|
||||||
|
mode = "system";
|
||||||
|
light = "Andromeda";
|
||||||
|
dark = "One Dark";
|
||||||
|
};
|
||||||
|
telemetry = {
|
||||||
|
diagnostics = false;
|
||||||
|
metrics = false;
|
||||||
|
};
|
||||||
|
languages = {
|
||||||
|
Markdown.remove_trailing_whitespace_on_save = false;
|
||||||
|
Markdown-Inline.remove_trailing_whitespace_on_save = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
16
home-modules/default.nix
Normal file
16
home-modules/default.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./applications
|
||||||
|
./theme
|
||||||
|
./multimedia.nix
|
||||||
|
./mimetypes.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.user.targets.tray.Unit = {
|
||||||
|
Description = "Home Manager System Tray";
|
||||||
|
Requires = [ "graphical-session-pre.target" ];
|
||||||
|
};
|
||||||
|
}
|
69
home-modules/mimetypes.nix
Normal file
69
home-modules/mimetypes.nix
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
xdg.mimeApps = rec {
|
||||||
|
enable = true;
|
||||||
|
associations.added = defaultApplications;
|
||||||
|
defaultApplications =
|
||||||
|
let
|
||||||
|
browser = [ "firefox.desktop" ];
|
||||||
|
email = [ "org.gnome.Evolution.desktop" ];
|
||||||
|
doc-editor = [ "writer.desktop" ];
|
||||||
|
sheet-editor = [ "calc.desktop" ];
|
||||||
|
presentation-editor = [ "impress.desktop" ];
|
||||||
|
pdf = [ "org.gnome.Evince.desktop" ];
|
||||||
|
image = [
|
||||||
|
"org.gnome.Loupe.desktop"
|
||||||
|
"gimp.desktop"
|
||||||
|
];
|
||||||
|
image-vector = [ "org.inkscape.Inkscape.desktop" ];
|
||||||
|
ebooks = [ "calibre-ebook-viewer.desktop" ];
|
||||||
|
code-general = [ "codium.desktop" ];
|
||||||
|
video = [ "mpv.desktop" ];
|
||||||
|
compression = [ "org.gnome.Nautilus.desktop" ];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"text/html" = browser;
|
||||||
|
"x-scheme-handler/http" = browser;
|
||||||
|
"x-scheme-handler/https" = browser;
|
||||||
|
"x-scheme-handler/chrome" = browser;
|
||||||
|
"application/xhtml+xml" = browser;
|
||||||
|
"application/x-extension-htm" = browser;
|
||||||
|
"application/x-extension-html" = browser;
|
||||||
|
"application/x-extension-shtml" = browser;
|
||||||
|
"application/x-extension-xhtml" = browser;
|
||||||
|
"application/x-extension-xht" = browser;
|
||||||
|
"x-scheme-handler/mailto" = email;
|
||||||
|
"text/calendar" = email;
|
||||||
|
|
||||||
|
"application/vnd.oasis.opendocument.text" = doc-editor;
|
||||||
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = doc-editor;
|
||||||
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = sheet-editor;
|
||||||
|
"application/vnd.openxmlformats-officedocument.presentationml.presentation" = presentation-editor;
|
||||||
|
"application/vnd.oasis.opendocument.presentation" = presentation-editor;
|
||||||
|
"application/pdf" = pdf;
|
||||||
|
"application/x-extension-pdf" = pdf;
|
||||||
|
"application/epub+zip" = ebooks;
|
||||||
|
|
||||||
|
"text/plain" = code-general;
|
||||||
|
"application/json" = code-general;
|
||||||
|
"text/markdown" = code-general;
|
||||||
|
|
||||||
|
"image/png" = image;
|
||||||
|
"image/jpg" = image;
|
||||||
|
"image/jpeg" = image;
|
||||||
|
"image/x-tga" = image;
|
||||||
|
"image/tiff" = image;
|
||||||
|
"image/x-canon-cr2" = image;
|
||||||
|
"application/x-ptoptimizer-script" = [ "hugin.desktop" ];
|
||||||
|
"image/svg+xml" = image-vector;
|
||||||
|
|
||||||
|
"video/mp4" = video;
|
||||||
|
"video/x-matroska" = video;
|
||||||
|
|
||||||
|
"application/zip" = compression;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
70
home-modules/multimedia.nix
Normal file
70
home-modules/multimedia.nix
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
programs.mpv = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
hwdec = "auto-safe";
|
||||||
|
vo = "gpu";
|
||||||
|
gpu-context = "wayland";
|
||||||
|
force-window = true;
|
||||||
|
profile = "gpu-hq";
|
||||||
|
};
|
||||||
|
scripts = [ pkgs.mpvScripts.mpris ];
|
||||||
|
};
|
||||||
|
home.packages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
v4l-utils
|
||||||
|
playerctl
|
||||||
|
yt-dlp
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Audio
|
||||||
|
gnome-sound-recorder
|
||||||
|
enblend-enfuse
|
||||||
|
ffmpeg
|
||||||
|
#sox mencoder
|
||||||
|
vorbis-tools
|
||||||
|
vorbisgain
|
||||||
|
opusTools
|
||||||
|
flac
|
||||||
|
lame
|
||||||
|
id3lib
|
||||||
|
id3v2 # icedax
|
||||||
|
pasystray
|
||||||
|
pavucontrol
|
||||||
|
spotify
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Imaging
|
||||||
|
gimp
|
||||||
|
hugin
|
||||||
|
lensfun
|
||||||
|
darktable
|
||||||
|
inkscape
|
||||||
|
ghostscript
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Codecs for Audio and Video
|
||||||
|
libdv
|
||||||
|
libdvbpsi # librtmp
|
||||||
|
xvidcore
|
||||||
|
x264
|
||||||
|
]
|
||||||
|
++ (with gst_all_1; [
|
||||||
|
gstreamer
|
||||||
|
gst-vaapi
|
||||||
|
gst-rtsp-server
|
||||||
|
gst-libav
|
||||||
|
gst-plugins-base
|
||||||
|
gst-plugins-bad
|
||||||
|
gst-plugins-good
|
||||||
|
gst-plugins-ugly
|
||||||
|
]);
|
||||||
|
}
|
9
home-modules/theme/default.nix
Normal file
9
home-modules/theme/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.catppuccin.homeManagerModules.catppuccin
|
||||||
|
];
|
||||||
|
}
|
38
nixos-configurations/ochsenchopf/default.nix
Normal file
38
nixos-configurations/ochsenchopf/default.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./filesystems.nix
|
||||||
|
./networking.nix
|
||||||
|
|
||||||
|
# TODO: Hardware
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = "x86_64-linux";
|
||||||
|
|
||||||
|
virtualisation = {
|
||||||
|
# TODO: This should probably be somewhere else.
|
||||||
|
docker = {
|
||||||
|
enable = true;
|
||||||
|
enableOnBoot = false;
|
||||||
|
};
|
||||||
|
libvirtd.enable = true;
|
||||||
|
spiceUSBRedirection.enable = true;
|
||||||
|
};
|
||||||
|
users.extraUsers.fhauser.extraGroups = [ "libvirtd" ];
|
||||||
|
|
||||||
|
boot.extraModprobeConfig = ''
|
||||||
|
options kvm_intel nested=1
|
||||||
|
options kvm_intel emulate_invalid_guest_state=0
|
||||||
|
options kvm ignore_msrs=1
|
||||||
|
'';
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like fi:le locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "24.05"; # Did you read the comment?
|
||||||
|
}
|
43
nixos-configurations/ochsenchopf/filesystems.nix
Normal file
43
nixos-configurations/ochsenchopf/filesystems.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
boot.initrd.luks.devices = {
|
||||||
|
"luks".device = "/dev/disk/by-label/luks";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems =
|
||||||
|
let
|
||||||
|
rootdev = "/dev/disk/by-label/hv_ochsenchopf";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"/" = {
|
||||||
|
device = rootdev;
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [ "subvol=nixos" ];
|
||||||
|
};
|
||||||
|
"/home" = {
|
||||||
|
device = rootdev;
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [ "subvol=home" ];
|
||||||
|
};
|
||||||
|
"/boot" = {
|
||||||
|
device = "/dev/disk/by-label/boot";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ { device = "/dev/disk/by-label/swap"; } ];
|
||||||
|
|
||||||
|
# Use the systemd-boot EFI boot loader.
|
||||||
|
boot.loader.systemd-boot.enable = lib.mkForce false;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
boot.initrd.systemd.enable = true;
|
||||||
|
boot.lanzaboote = {
|
||||||
|
enable = true;
|
||||||
|
pkiBundle = "/etc/secureboot";
|
||||||
|
};
|
||||||
|
}
|
26
nixos-configurations/ochsenchopf/networking.nix
Normal file
26
nixos-configurations/ochsenchopf/networking.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
networkmanager = {
|
||||||
|
enable = true;
|
||||||
|
# Does currently not work...
|
||||||
|
#enableFccUnlock = true;
|
||||||
|
};
|
||||||
|
useDHCP = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.tailscale = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
useRoutingFeatures = "client";
|
||||||
|
authKeyFile = "/secrets/wireguard/tailscale-key";
|
||||||
|
extraUpFlags = [
|
||||||
|
"--operator"
|
||||||
|
"fhauser"
|
||||||
|
"--accept-routes"
|
||||||
|
"--exit-node=100.64.0.6"
|
||||||
|
"--login-server=https://vpn.qo.is"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
40
nixos-configurations/speer/default.nix
Normal file
40
nixos-configurations/speer/default.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./filesystems.nix
|
||||||
|
./networking.nix
|
||||||
|
./disko-config.nix
|
||||||
|
|
||||||
|
# TODO: Hardware
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = "x86_64-linux";
|
||||||
|
|
||||||
|
virtualisation = {
|
||||||
|
# TODO: This should probably be somewhere else.
|
||||||
|
docker = {
|
||||||
|
enable = true;
|
||||||
|
enableOnBoot = false;
|
||||||
|
};
|
||||||
|
libvirtd.enable = true;
|
||||||
|
spiceUSBRedirection.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.extraModprobeConfig = ''
|
||||||
|
options kvm_intel nested=1
|
||||||
|
options kvm_intel emulate_invalid_guest_state=0
|
||||||
|
options kvm ignore_msrs=1
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
time.timeZone = "Europe/Tallinn";
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like fi:le locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "24.11"; # Did you read the comment?
|
||||||
|
}
|
98
nixos-configurations/speer/disko-config.nix
Normal file
98
nixos-configurations/speer/disko-config.nix
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = rec {
|
||||||
|
system-1 = {
|
||||||
|
type = "disk";
|
||||||
|
device = "/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NX0W821176E";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
boot = {
|
||||||
|
size = "1G";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
raid_system = {
|
||||||
|
start = "30G";
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "mdraid";
|
||||||
|
name = "raid_system";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
#system-2 = {
|
||||||
|
# type = "disk";
|
||||||
|
# device = "/dev/disk/by-id/nvme-XXXXX";
|
||||||
|
# content = pkgs.lib.recursiveUpdate system-1.content {
|
||||||
|
# partitions.boot.content.mountpoint = "/boot-secondary";
|
||||||
|
# };
|
||||||
|
#};
|
||||||
|
};
|
||||||
|
|
||||||
|
mdadm = {
|
||||||
|
"raid_system" = {
|
||||||
|
type = "mdadm";
|
||||||
|
level = 1;
|
||||||
|
content = {
|
||||||
|
type = "luks";
|
||||||
|
name = "crypted_system";
|
||||||
|
passwordFile = "/run/secrets/system/hdd.key";
|
||||||
|
settings = {
|
||||||
|
allowDiscards = true;
|
||||||
|
bypassWorkqueues = true;
|
||||||
|
};
|
||||||
|
content = {
|
||||||
|
type = "lvm_pv";
|
||||||
|
vg = "vg_system";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
lvm_vg = {
|
||||||
|
vg_system = {
|
||||||
|
type = "lvm_vg";
|
||||||
|
lvs = {
|
||||||
|
swap = {
|
||||||
|
size = "32G";
|
||||||
|
content = {
|
||||||
|
type = "swap";
|
||||||
|
resumeDevice = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
data = {
|
||||||
|
size = "1000GB";
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
subvolumes."/home".mountpoint = "/home";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
hv_speer = {
|
||||||
|
size = "200GiB";
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
subvolumes = {
|
||||||
|
"/root".mountpoint = "/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
22
nixos-configurations/speer/filesystems.nix
Normal file
22
nixos-configurations/speer/filesystems.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
# Configurations are set in disko-config.nix!
|
||||||
|
|
||||||
|
# mdadm.conf generated by `mdadm --detail --scan`
|
||||||
|
# TODO
|
||||||
|
boot.swraid.enable = true;
|
||||||
|
boot.swraid.mdadmConf = ''
|
||||||
|
MAILADDR root
|
||||||
|
'';
|
||||||
|
|
||||||
|
services.fwupd.daemonSettings.EspLocation = pkgs.lib.mkForce config.disko.devices.disk.system-1.content.partitions.boot.content.mountpoint;
|
||||||
|
|
||||||
|
# Use the systemd-boot EFI boot loader.
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
}
|
22
nixos-configurations/speer/networking.nix
Normal file
22
nixos-configurations/speer/networking.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
networkmanager.enable = true;
|
||||||
|
useDHCP = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
services.tailscale = {
|
||||||
|
enable = true;
|
||||||
|
openFirewall = true;
|
||||||
|
useRoutingFeatures = "client";
|
||||||
|
authKeyFile = "/secrets/wireguard/tailscale-key";
|
||||||
|
extraUpFlags = [
|
||||||
|
"--operator"
|
||||||
|
"fhauser"
|
||||||
|
"--accept-routes"
|
||||||
|
"--exit-node=100.64.0.6"
|
||||||
|
"--login-server=https://vpn.qo.is"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
4
nixos-modules/base-system/default.nix
Normal file
4
nixos-modules/base-system/default.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.lanzaboote.nixosModules.lanzaboote ];
|
||||||
|
}
|
87
nixos-modules/base/applications.nix
Normal file
87
nixos-modules/base/applications.nix
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.systemPackages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
tmux
|
||||||
|
pciutils
|
||||||
|
dmidecode
|
||||||
|
smartmontools
|
||||||
|
borgbackup
|
||||||
|
iw
|
||||||
|
killall
|
||||||
|
bc
|
||||||
|
efibootmgr
|
||||||
|
efitools
|
||||||
|
efivar
|
||||||
|
mkpasswd
|
||||||
|
rename
|
||||||
|
wipe
|
||||||
|
gnupg
|
||||||
|
pass-wayland
|
||||||
|
pwgen
|
||||||
|
powertop
|
||||||
|
lm_sensors
|
||||||
|
sbctl
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
nixfmt-rfc-style
|
||||||
|
nix-index
|
||||||
|
nix-diff
|
||||||
|
nixpkgs-review
|
||||||
|
nixos-option
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
autojump
|
||||||
|
powerline-go
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# File Utilities
|
||||||
|
ripgrep
|
||||||
|
unzip
|
||||||
|
p7zip
|
||||||
|
unrar
|
||||||
|
iotop
|
||||||
|
cabextract
|
||||||
|
tree
|
||||||
|
vim
|
||||||
|
vimPlugins.pathogen
|
||||||
|
vimPlugins.airline
|
||||||
|
git
|
||||||
|
git-lfs
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Filesystem & Disk Utilities
|
||||||
|
exfat
|
||||||
|
samba
|
||||||
|
cifs-utils
|
||||||
|
keyutils # required for cifs kerberos auth
|
||||||
|
sshfs-fuse
|
||||||
|
hdparm
|
||||||
|
mtpfs
|
||||||
|
ntfs3g
|
||||||
|
smartmontools
|
||||||
|
parted
|
||||||
|
usbutils
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
# Networking Utilities
|
||||||
|
nmap
|
||||||
|
bind
|
||||||
|
curl
|
||||||
|
wget
|
||||||
|
tor
|
||||||
|
whois
|
||||||
|
wol
|
||||||
|
rsync
|
||||||
|
sshuttle
|
||||||
|
iftop
|
||||||
|
mailutils
|
||||||
|
imapsync
|
||||||
|
bluez-tools
|
||||||
|
];
|
||||||
|
}
|
112
nixos-modules/base/default.nix
Normal file
112
nixos-modules/base/default.nix
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
users = {
|
||||||
|
fhauser = {
|
||||||
|
uid = 1000;
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Fabian Hauser";
|
||||||
|
group = "fhauser";
|
||||||
|
extraGroups = [
|
||||||
|
"wheel"
|
||||||
|
"video"
|
||||||
|
"docker"
|
||||||
|
"networkmanager"
|
||||||
|
"libvirtd"
|
||||||
|
"adbusers"
|
||||||
|
];
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIPF8ZV7vhpbVvLxiKq8ANVusNUHMbtii5MuvjxCbVz7vSNVPo9OOLvYyDqhbRAWMTdQeGZVAaALBufKKmprDTRFMpnA7Ut4TFrdz/5DTaR2KEjJ7P75moH+0xooR/GsbzFGsNBSQSXK3u1igndPYEC/PqCHN++32kDo2wLqTB4VLrEovU3iq8BMckn329Bu1fGbXKTgDpEvUEEwFO2brQZLMmzILGF/v4B9ImEGtinAUNgDSfEpgPN23sdWQH9rwEClGv95JmWNf05tuVomhZzOBtCFoAno3XB1nj16avjsqJ3aGFY2CCcfsNrwKzhIotmm82bcI4BJuJIVRIKbZ1 cardno:000603507108"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.private.nixosModules.users # Contains hashedPasswords for users.
|
||||||
|
./unfree.nix
|
||||||
|
./applications.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.loader.timeout = 2;
|
||||||
|
boot.tmp.useTmpfs = true;
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
boot.bootspec.enable = true;
|
||||||
|
|
||||||
|
catppuccin = {
|
||||||
|
flavor = "mocha";
|
||||||
|
tty.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
console.keyMap = "de_CH-latin1";
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
||||||
|
users.mutableUsers = false;
|
||||||
|
users.groups = {
|
||||||
|
fhauser.gid = 1000;
|
||||||
|
};
|
||||||
|
users.users = users // {
|
||||||
|
root.openssh.authorizedKeys.keys =
|
||||||
|
with lib;
|
||||||
|
concatLists (
|
||||||
|
mapAttrsToList (
|
||||||
|
_name: user: if elem "wheel" user.extraGroups then user.openssh.authorizedKeys.keys else [ ]
|
||||||
|
) users
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
# Package management
|
||||||
|
nix = {
|
||||||
|
settings.trusted-users = [
|
||||||
|
"root"
|
||||||
|
"@wheel"
|
||||||
|
];
|
||||||
|
optimise.automatic = true;
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 60d";
|
||||||
|
};
|
||||||
|
package = pkgs.nixVersions.stable;
|
||||||
|
extraOptions = ''
|
||||||
|
experimental-features = nix-command flakes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# System Services
|
||||||
|
services.btrfs.autoScrub.enable = true;
|
||||||
|
services.fwupd.enable = true;
|
||||||
|
|
||||||
|
# Network services
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
networking.firewall = {
|
||||||
|
allowPing = true;
|
||||||
|
allowedTCPPorts = [ 22 ];
|
||||||
|
};
|
||||||
|
systemd.services.NetworkManager-wait-online.enable = false;
|
||||||
|
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings.PasswordAuthentication = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Default Settings
|
||||||
|
environment.etc = {
|
||||||
|
gitconfig.source = ./etc/gitconfig;
|
||||||
|
vimrc.source = ./etc/vimrc;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.autojump.enable = true;
|
||||||
|
programs.vim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true;
|
||||||
|
};
|
||||||
|
environment.systemPackages = [ pkgs.comma ];
|
||||||
|
|
||||||
|
services.dbus.implementation = "broker";
|
||||||
|
}
|
31
nixos-modules/base/etc/gitconfig
Normal file
31
nixos-modules/base/etc/gitconfig
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
[core]
|
||||||
|
packedGitWindowSize = 16m
|
||||||
|
packedGitLimit = 64m
|
||||||
|
[pack]
|
||||||
|
windowMemory = 64m
|
||||||
|
packSizeLimit = 64m
|
||||||
|
thread = 1
|
||||||
|
deltaCacheSize = 1m
|
||||||
|
[color]
|
||||||
|
branch = auto
|
||||||
|
diff = auto
|
||||||
|
status = auto
|
||||||
|
[push]
|
||||||
|
default = simple
|
||||||
|
[pull]
|
||||||
|
rebase = true
|
||||||
|
[branch]
|
||||||
|
autosetuprebase = always
|
||||||
|
[commit]
|
||||||
|
# gpgsign = true
|
||||||
|
[tag]
|
||||||
|
# gpgsign = true
|
||||||
|
|
||||||
|
[alias]
|
||||||
|
s = status --short --branch
|
||||||
|
a = add --patch
|
||||||
|
c = commit --message
|
||||||
|
l = log --color --graph --pretty=format:'%Cred%h%Creset - %C(bold)%s%Creset%C(yellow)%d%Creset %C(green)%an%Creset %C(cyan)%cr%Creset' --abbrev-commit
|
||||||
|
d = diff
|
||||||
|
[diff]
|
||||||
|
# noprefix = true
|
54
nixos-modules/base/etc/vimrc
Normal file
54
nixos-modules/base/etc/vimrc
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
|
||||||
|
" Use Vim settings, rather than Vi settings (much better!).
|
||||||
|
" This must be first, because it changes other options as a side effect.
|
||||||
|
" Avoid side effects when it was already reset.
|
||||||
|
if &compatible
|
||||||
|
set nocompatible
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Convenient command to see the difference between the current buffer and the
|
||||||
|
" file it was loaded from, thus the changes you made.
|
||||||
|
" Only define it when not defined already.
|
||||||
|
" Revert with: ":delcommand DiffOrig".
|
||||||
|
if !exists(":DiffOrig")
|
||||||
|
command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
|
||||||
|
\ | wincmd p | diffthis
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Don't wake up system with blinking cursor:
|
||||||
|
" http://www.linuxpowertop.org/known.php
|
||||||
|
let &guicursor = &guicursor . ",a:blinkon0"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
""""""""""""""""""""""""""
|
||||||
|
" Design Settings
|
||||||
|
""""""""""""""""""""""""""
|
||||||
|
set background=dark
|
||||||
|
colorscheme elflord
|
||||||
|
|
||||||
|
""""""""""""""""""""""""""
|
||||||
|
" Other Settings
|
||||||
|
""""""""""""""""""""""""""
|
||||||
|
set ignorecase " Ignore search case
|
||||||
|
set autoindent " Newline with automatic text indent
|
||||||
|
set ruler " Show current position
|
||||||
|
set pastetoggle=<F2>
|
||||||
|
set ignorecase
|
||||||
|
set hidden
|
||||||
|
|
||||||
|
set splitbelow
|
||||||
|
set splitright
|
||||||
|
|
||||||
|
set tabstop=2
|
||||||
|
set shiftwidth=2
|
||||||
|
set softtabstop=2
|
||||||
|
set expandtab
|
||||||
|
|
||||||
|
set listchars="eol:¬,tab:>·,trail:~,extends:>,precedes:<,space:␣"
|
||||||
|
set grepprg=ack\ -k
|
||||||
|
|
||||||
|
filetype plugin indent on
|
||||||
|
syntax on
|
||||||
|
|
56
nixos-modules/base/unfree.nix
Normal file
56
nixos-modules/base/unfree.nix
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
nixpkgs.config.allowUnfreePredicate =
|
||||||
|
pkg:
|
||||||
|
builtins.elem (lib.getName pkg) [
|
||||||
|
"unrar"
|
||||||
|
|
||||||
|
"steam"
|
||||||
|
"steam-run"
|
||||||
|
"steam-original"
|
||||||
|
"steam-unwrapped"
|
||||||
|
|
||||||
|
"hplip"
|
||||||
|
|
||||||
|
"google-chrome"
|
||||||
|
"spotify"
|
||||||
|
"spotify-unwrapped"
|
||||||
|
"discord"
|
||||||
|
"teamviewer"
|
||||||
|
"todoist-electron"
|
||||||
|
"todoist-electron-8.10.1"
|
||||||
|
"obsidian"
|
||||||
|
|
||||||
|
"davinci-resolve"
|
||||||
|
"davinci-resolve-18.6.3"
|
||||||
|
|
||||||
|
"lightworks"
|
||||||
|
"lightworks-2023.1"
|
||||||
|
"nvidia-cg-toolkit-3.1"
|
||||||
|
"nvidia-cg-toolkit"
|
||||||
|
|
||||||
|
"corefonts"
|
||||||
|
"camingo-code"
|
||||||
|
"helvetica-neue-lt-std"
|
||||||
|
#"kochi-substitute-naga10"
|
||||||
|
"ttf-envy-code-r"
|
||||||
|
"vista-fonts"
|
||||||
|
"vista-fonts-chs"
|
||||||
|
"xkcd-font-unstable"
|
||||||
|
"xkcd-font"
|
||||||
|
"xkcd-font-unstable-2017-08-24"
|
||||||
|
"ricty"
|
||||||
|
|
||||||
|
"pycharm-professional"
|
||||||
|
"idea-ultimate"
|
||||||
|
"android-studio-stable"
|
||||||
|
"android-studio-beta"
|
||||||
|
|
||||||
|
"vmware-view"
|
||||||
|
];
|
||||||
|
}
|
14
nixos-modules/default.nix
Normal file
14
nixos-modules/default.nix
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./base
|
||||||
|
./base-system
|
||||||
|
./desktop
|
||||||
|
./filesystems
|
||||||
|
#./hardware #TODO
|
||||||
|
./home-manager
|
||||||
|
./printing
|
||||||
|
./theme
|
||||||
|
];
|
||||||
|
}
|
15
nixos-modules/desktop/default.nix
Normal file
15
nixos-modules/desktop/default.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./desktop-environment.nix
|
||||||
|
./greeter.nix
|
||||||
|
./hardware.nix
|
||||||
|
./office-suite.nix
|
||||||
|
./security.nix
|
||||||
|
./video.nix
|
||||||
|
./llm.nix
|
||||||
|
];
|
||||||
|
}
|
81
nixos-modules/desktop/desktop-environment.nix
Normal file
81
nixos-modules/desktop/desktop-environment.nix
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
mkDefault = lib.mkDefault;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
freetype
|
||||||
|
lxappearance
|
||||||
|
sound-theme-freedesktop
|
||||||
|
|
||||||
|
qt5.qtwayland # Required for qt applications
|
||||||
|
];
|
||||||
|
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||||
|
environment.sessionVariables.DO_NOT_TRACK = "1";
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
gnome-terminal.enable = false;
|
||||||
|
evolution = {
|
||||||
|
enable = true;
|
||||||
|
#plugins = [ pkgs.evolution-ews ];
|
||||||
|
};
|
||||||
|
geary.enable = false;
|
||||||
|
light.enable = true;
|
||||||
|
|
||||||
|
dconf.enable = true;
|
||||||
|
|
||||||
|
sway.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.gnome = {
|
||||||
|
# TODO: Do this manually and not all at once.
|
||||||
|
core-utilities.enable = true;
|
||||||
|
core-os-services.enable = false;
|
||||||
|
|
||||||
|
gnome-keyring.enable = true;
|
||||||
|
evolution-data-server.enable = true;
|
||||||
|
gnome-online-accounts.enable = true;
|
||||||
|
gnome-remote-desktop.enable = true;
|
||||||
|
sushi.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
##########
|
||||||
|
# gnome.core-os-services excerpt
|
||||||
|
|
||||||
|
security.polkit.enable = true;
|
||||||
|
services.power-profiles-daemon.enable = false; # TODO: Remove
|
||||||
|
|
||||||
|
# Explicitly enabled since GNOME will be severely broken without these.
|
||||||
|
xdg.mime.enable = true;
|
||||||
|
xdg.icons.enable = true;
|
||||||
|
|
||||||
|
# Harmonize Qt5 application style and also make them use the portal for file chooser dialog.
|
||||||
|
qt = {
|
||||||
|
enable = mkDefault true;
|
||||||
|
platformTheme = mkDefault "gnome";
|
||||||
|
style = mkDefault "adwaita";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Needed for themes and backgrounds
|
||||||
|
environment.pathsToLink = [
|
||||||
|
"/share" # TODO: https://github.com/NixOS/nixpkgs/issues/47173
|
||||||
|
];
|
||||||
|
|
||||||
|
# GVFS
|
||||||
|
services.gvfs.enable = true;
|
||||||
|
|
||||||
|
# Flatpak
|
||||||
|
services.flatpak.enable = true;
|
||||||
|
|
||||||
|
# Portals
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
wlr.enable = true;
|
||||||
|
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||||
|
};
|
||||||
|
}
|
35
nixos-modules/desktop/greeter.nix
Normal file
35
nixos-modules/desktop/greeter.nix
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
services.xserver.windowManager.i3.enable = false;
|
||||||
|
|
||||||
|
services.displayManager = {
|
||||||
|
defaultSession = "sway";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable touchpad support.
|
||||||
|
services.libinput.enable = true;
|
||||||
|
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
desktopManager.xterm.enable = false;
|
||||||
|
displayManager = {
|
||||||
|
startx.enable = false;
|
||||||
|
lightdm.enable = false;
|
||||||
|
gdm = {
|
||||||
|
enable = true;
|
||||||
|
wayland = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# TODO: Extract i18n
|
||||||
|
xkb = {
|
||||||
|
layout = "ch,de";
|
||||||
|
options = "eurosign:e";
|
||||||
|
};
|
||||||
|
|
||||||
|
updateDbusEnvironment = true;
|
||||||
|
};
|
||||||
|
}
|
60
nixos-modules/desktop/hardware.nix
Normal file
60
nixos-modules/desktop/hardware.nix
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
services.blueman.enable = true;
|
||||||
|
|
||||||
|
# Enable sound.
|
||||||
|
nixpkgs.config.pulseaudio = true;
|
||||||
|
|
||||||
|
services.pulseaudio.enable = false;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
};
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
graphics = {
|
||||||
|
enable = true;
|
||||||
|
enable32Bit = true;
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
intel-compute-runtime
|
||||||
|
intel-media-driver
|
||||||
|
libvdpau-va-gl
|
||||||
|
vaapiVdpau
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
acpilight.enable = true;
|
||||||
|
bluetooth = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.bluez;
|
||||||
|
};
|
||||||
|
logitech.wireless = {
|
||||||
|
enable = true;
|
||||||
|
enableGraphical = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.hardware.bolt.enable = true;
|
||||||
|
services.udisks2.enable = true;
|
||||||
|
services.upower.enable = config.powerManagement.enable;
|
||||||
|
|
||||||
|
programs.light.enable = true;
|
||||||
|
programs.adb.enable = true;
|
||||||
|
|
||||||
|
services.fprintd = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.fprintd-tod;
|
||||||
|
tod = {
|
||||||
|
enable = true;
|
||||||
|
driver = pkgs.libfprint-2-tod1-vfs0090;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
10
nixos-modules/desktop/llm.nix
Normal file
10
nixos-modules/desktop/llm.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
services.ollama.enable = true;
|
||||||
|
|
||||||
|
services.nextjs-ollama-llm-ui = {
|
||||||
|
enable = true;
|
||||||
|
port = 7001;
|
||||||
|
};
|
||||||
|
}
|
180
nixos-modules/desktop/office-suite.nix
Normal file
180
nixos-modules/desktop/office-suite.nix
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
# Hamster
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
hamster
|
||||||
|
];
|
||||||
|
programs.hamster.enable = true;
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
fonts.packages = with pkgs; [
|
||||||
|
# google-fonts # Breaks fwesome
|
||||||
|
lalezar-fonts
|
||||||
|
nahid-fonts
|
||||||
|
nika-fonts
|
||||||
|
agave
|
||||||
|
aileron
|
||||||
|
amiri
|
||||||
|
andagii
|
||||||
|
#andika # Breaks Font-Awesome
|
||||||
|
ankacoder
|
||||||
|
ankacoder-condensed
|
||||||
|
aurulent-sans
|
||||||
|
caladea
|
||||||
|
cantarell-fonts
|
||||||
|
carlito
|
||||||
|
cascadia-code
|
||||||
|
#charis-sil # Breaks Font-Awesome
|
||||||
|
cherry
|
||||||
|
cnstrokeorder
|
||||||
|
comfortaa
|
||||||
|
comic-neue
|
||||||
|
comic-relief
|
||||||
|
# corefonts # breaks fawesome
|
||||||
|
culmus
|
||||||
|
clearlyU
|
||||||
|
creep
|
||||||
|
crimson
|
||||||
|
dejavu_fonts
|
||||||
|
dina-font
|
||||||
|
#doulos-sil # Breaks Font-Awesome
|
||||||
|
cabin
|
||||||
|
camingo-code
|
||||||
|
cooper-hewitt
|
||||||
|
#d2coding
|
||||||
|
dosis
|
||||||
|
dosemu_fonts
|
||||||
|
eb-garamond
|
||||||
|
eunomia
|
||||||
|
ferrum
|
||||||
|
# fixedsys-excelsior # Breaks fawesome
|
||||||
|
emacs-all-the-icons-fonts
|
||||||
|
emojione
|
||||||
|
encode-sans
|
||||||
|
envypn-font
|
||||||
|
fantasque-sans-mono
|
||||||
|
fira
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
fira-mono
|
||||||
|
#gentium
|
||||||
|
#gentium-book-basic
|
||||||
|
#gohufont
|
||||||
|
#go-font
|
||||||
|
#gubbi-font
|
||||||
|
#gyre-fonts
|
||||||
|
#hack-font
|
||||||
|
##helvetica-neue-lt-std
|
||||||
|
#hanazono
|
||||||
|
#hermit
|
||||||
|
#hyperscrypt-font
|
||||||
|
#ia-writer-duospace
|
||||||
|
#inconsolata
|
||||||
|
#inconsolata-lgc
|
||||||
|
##input-fonts
|
||||||
|
#inriafonts
|
||||||
|
#iosevka
|
||||||
|
#iosevka-bin
|
||||||
|
#ipafont
|
||||||
|
#ipaexfont
|
||||||
|
#iwona
|
||||||
|
#jetbrains-mono
|
||||||
|
#jost
|
||||||
|
#kanji-stroke-order-font
|
||||||
|
#latinmodern-math
|
||||||
|
#lato
|
||||||
|
#league-of-moveable-type
|
||||||
|
##liberation-sans-narrow
|
||||||
|
#libertine
|
||||||
|
#libertinus
|
||||||
|
#libre-baskerville
|
||||||
|
#libre-bodoni
|
||||||
|
#libre-caslon
|
||||||
|
#libre-franklin
|
||||||
|
#lmmath
|
||||||
|
#lmodern
|
||||||
|
#luculent
|
||||||
|
#marathi-cursive
|
||||||
|
#manrope
|
||||||
|
#material-design-icons
|
||||||
|
#material-icons
|
||||||
|
#meslo-lg
|
||||||
|
#migmix
|
||||||
|
#migu
|
||||||
|
#medio
|
||||||
|
#mno16
|
||||||
|
#monoid
|
||||||
|
#mononoki
|
||||||
|
#montserrat
|
||||||
|
#mph_2b_damase
|
||||||
|
#mplus-outline-fonts
|
||||||
|
#mro-unicode
|
||||||
|
#myrica
|
||||||
|
#nafees
|
||||||
|
#nanum-gothic-coding
|
||||||
|
#national-park-typeface
|
||||||
|
#office-code-pro
|
||||||
|
#oldstandard
|
||||||
|
#oldsindhi
|
||||||
|
#open-dyslexic
|
||||||
|
open-sans
|
||||||
|
orbitron
|
||||||
|
overpass
|
||||||
|
oxygenfonts
|
||||||
|
#pecita
|
||||||
|
#paratype-pt-mono # Breaks fawseome
|
||||||
|
#paratype-pt-sans # Breaks fawseome
|
||||||
|
#paratype-pt-serif # Breaks fawseome
|
||||||
|
penna
|
||||||
|
poly
|
||||||
|
powerline-fonts
|
||||||
|
profont
|
||||||
|
proggyfonts
|
||||||
|
public-sans
|
||||||
|
redhat-official-fonts
|
||||||
|
route159
|
||||||
|
#sarasa-gothic
|
||||||
|
seshat
|
||||||
|
scheherazade
|
||||||
|
#signwriting
|
||||||
|
stix-otf
|
||||||
|
stix-two
|
||||||
|
quattrocento
|
||||||
|
quattrocento-sans
|
||||||
|
raleway
|
||||||
|
recursive
|
||||||
|
rhodium-libre
|
||||||
|
roboto
|
||||||
|
roboto-mono
|
||||||
|
roboto-slab
|
||||||
|
hasklig
|
||||||
|
siji
|
||||||
|
source-code-pro
|
||||||
|
source-sans-pro
|
||||||
|
source-serif-pro
|
||||||
|
tamsyn
|
||||||
|
theano
|
||||||
|
tenderness
|
||||||
|
terminus_font
|
||||||
|
tipa
|
||||||
|
twemoji-color-font
|
||||||
|
twitter-color-emoji
|
||||||
|
ubuntu_font_family
|
||||||
|
#ucs-fonts
|
||||||
|
ultimate-oldschool-pc-font-pack
|
||||||
|
victor-mono
|
||||||
|
work-sans
|
||||||
|
wqy_microhei
|
||||||
|
wqy_zenhei
|
||||||
|
xits-math
|
||||||
|
xkcd-font
|
||||||
|
yanone-kaffeesatz
|
||||||
|
norwester-font
|
||||||
|
font-awesome
|
||||||
|
]; # Generated with `cd /home/fhauser/projects/nixos/nixpkgs/pkgs/data/fonts; echo *`
|
||||||
|
}
|
13
nixos-modules/desktop/security.nix
Normal file
13
nixos-modules/desktop/security.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.pcscd.enable = true;
|
||||||
|
|
||||||
|
# Make pam accept both password and fingerprint
|
||||||
|
security.pam.services.swaylock.rules.auth = {
|
||||||
|
fprintd.order = 11601;
|
||||||
|
unix.args = [ "nullok" ];
|
||||||
|
};
|
||||||
|
}
|
10
nixos-modules/desktop/video.nix
Normal file
10
nixos-modules/desktop/video.nix
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
#boot.kernelModules = [ "v4l2loopback" ];
|
||||||
|
#boot.extraModulePackages = [ pkgs.linuxPackages_latest.v4l2loopback ];
|
||||||
|
|
||||||
|
programs.steam.enable = true;
|
||||||
|
}
|
4
nixos-modules/filesystems/default.nix
Normal file
4
nixos-modules/filesystems/default.nix
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ inputs.disko.nixosModules.disko ];
|
||||||
|
}
|
69
nixos-modules/hardware/amd-board.nix
Normal file
69
nixos-modules/hardware/amd-board.nix
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
thunderboltDevices = ''
|
||||||
|
THUNDERBOLT_DEVICES="$(${pkgs.pciutils}/bin/lspci -D | ${pkgs.gnugrep}/bin/grep -i thunderbolt | cut --delimiter=' ' --fields=1)"
|
||||||
|
'';
|
||||||
|
forceThunderboltOnScript = pkgs.writeScriptBin "force-thunderbolt-power-on" ''
|
||||||
|
#!${pkgs.stdenv.shell}
|
||||||
|
|
||||||
|
${thunderboltDevices}
|
||||||
|
|
||||||
|
echo "Force PCI power on all thunderbolt devices"
|
||||||
|
for DEVICE in $THUNDERBOLT_DEVICES; do
|
||||||
|
echo 'on' > "/sys/bus/pci/devices/$DEVICE/power/control"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
thunderboltDockRestart = pkgs.writeScriptBin "thunderbolt-dock-restart" ''
|
||||||
|
#!${pkgs.stdenv.shell}
|
||||||
|
|
||||||
|
${thunderboltDevices}
|
||||||
|
|
||||||
|
echo "Force PCI remove on all thunderbolt devices"
|
||||||
|
for DEVICE in $THUNDERBOLT_DEVICES; do
|
||||||
|
echo 1 > /sys/bus/pci/devices/$DEVICE/remove
|
||||||
|
echo "Dropped device $DEVICE"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
echo 'Please re-plug the dock and confirm [enter]'
|
||||||
|
read
|
||||||
|
|
||||||
|
echo 'Rescanning PCI devices...'
|
||||||
|
echo 1 > /sys/bus/pci/rescan
|
||||||
|
|
||||||
|
echo 'Done.'
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"virtio-pci"
|
||||||
|
"igb"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [
|
||||||
|
"kvm-amd"
|
||||||
|
"uhid"
|
||||||
|
];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
boot.kernelParams = [ "acpi_enforce_resources=lax" ];
|
||||||
|
|
||||||
|
environment.systemPackages = [ thunderboltDockRestart ];
|
||||||
|
|
||||||
|
hardware.cpu.amd.updateMicrocode = true;
|
||||||
|
nix.settings.max-jobs = lib.mkDefault 24;
|
||||||
|
|
||||||
|
powerManagement.powerUpCommands = "${forceThunderboltOnScript}/bin/force-thunderbolt-power-on";
|
||||||
|
}
|
8
nixos-modules/hardware/ecc-memory.nix
Normal file
8
nixos-modules/hardware/ecc-memory.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
hardware.rasdaemon = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
42
nixos-modules/hardware/thinkpad-x1-gen9.nix
Normal file
42
nixos-modules/hardware/thinkpad-x1-gen9.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
hardwareModules,
|
||||||
|
pkgFccUnlock,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = with hardwareModules; [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
hardwareModules.lenovo-thinkpad-x1-9th-gen
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"xhci_pci"
|
||||||
|
"thunderbolt"
|
||||||
|
"nvme"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
|
||||||
|
boot.initrd.kernelModules = [ "dm-snapshot" ]; # TODO: This should be moved to defaults
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
modemmanager
|
||||||
|
libmbim
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.etc."ModemManager/fcc-unlock.d/1eac:1001" = {
|
||||||
|
source = "${pkgFccUnlock}/bin/fcc-unlock";
|
||||||
|
};
|
||||||
|
|
||||||
|
# CPU Configuration
|
||||||
|
hardware.cpu.intel.updateMicrocode = true;
|
||||||
|
services.throttled.enable = true;
|
||||||
|
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
|
||||||
|
}
|
12
nixos-modules/home-manager/default.nix
Normal file
12
nixos-modules/home-manager/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
backupFileExtension = ".hm-bak";
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
};
|
||||||
|
}
|
17
nixos-modules/printing/default.nix
Normal file
17
nixos-modules/printing/default.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
#services.printing = {
|
||||||
|
# enable = true;
|
||||||
|
# drivers = with pkgs; [
|
||||||
|
# gutenprint
|
||||||
|
# hplip
|
||||||
|
# splix
|
||||||
|
# ];
|
||||||
|
#};
|
||||||
|
|
||||||
|
#services.system-config-printer.enable = true;
|
||||||
|
#programs.system-config-printer.enable = true;
|
||||||
|
}
|
6
nixos-modules/theme/default.nix
Normal file
6
nixos-modules/theme/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ inputs.catppuccin.nixosModules.catppuccin ];
|
||||||
|
|
||||||
|
}
|
1
private
Submodule
1
private
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit f2b5747476e21c585d304e38f2ba519e9a99714d
|
13
renovate.json
Normal file
13
renovate.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [ "config:recommended" ],
|
||||||
|
"lockFileMaintenance": {
|
||||||
|
"enabled": true,
|
||||||
|
"extends": [ "schedule:weekly" ]
|
||||||
|
},
|
||||||
|
"cloneSubmodules": true,
|
||||||
|
"nix": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue