Compare commits

..

No commits in common. "master" and "9a4cbea5be0f20f9e4c3f31db2d1b83590feeb2e" have entirely different histories.

105 changed files with 1401 additions and 4537 deletions
flake.lockflake.nix
hosts
lib
modules
overlays
packages
applications
audio/sublime-music
desktop
qtgreet
rgb_keyboard
xwaylandvideobridge
networking/instant-messengers
discord-app
discord
gajim
wayfire/firedecor
default.nix
desktop/gnome/extensions
notification-timeout
windowisready-remover
development
cpp
dfl-app
dfl-ipc
dfl-utils
libkpipewire
wayqt
python/keyrings.gopass
misc/video
animdl
anime4k
mpv-prescalers
mpv-shader-pack
obs
obs-cli
obs-websocket
sandbox.nix
scripts/zoom-vm
temp
themes/sddm/sugar-dark
tools

View File

@ -2,14 +2,14 @@
"nodes": {
"agenix": {
"inputs": {
"nixpkgs": "nixpkgs_4"
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1640802000,
"narHash": "sha256-ZiI94Zv/IgW64fqKrtVaQqfUCkn9STvAjgfFmvtqcQ8=",
"lastModified": 1634404028,
"narHash": "sha256-JyP2Y6JCCYvUcVz7CXX5pXUfTGTU4GX51Yza82BgMfk=",
"owner": "ryantm",
"repo": "agenix",
"rev": "c5558c88b2941bf94886dfdede6926b1ba5f5629",
"rev": "53aa91b4170da35a96fab1577c9a34bc0da44e27",
"type": "github"
},
"original": {
@ -19,17 +19,12 @@
}
},
"emacs": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1693879203,
"narHash": "sha256-0CGMa3MxeG3YsVetUtxg6eZumQIe8FJ+WHVfR2ko9zM=",
"lastModified": 1636881202,
"narHash": "sha256-XmXmV7ddohRKXcVzVDdw6LB0/53gu+rjQ+vScdakKGM=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "3adaef3b1bebdc244a03ee19f705f5a3190a33d9",
"rev": "23c8464f4527a2b19f6b4776378dd03b8289aa85",
"type": "github"
},
"original": {
@ -38,37 +33,13 @@
"type": "github"
}
},
"flake-helper": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"pkg-unstable"
]
},
"locked": {
"lastModified": 1649622552,
"narHash": "sha256-KT5CPoqkB9HZqw/pqynczRzsH/PQTImfaY5Oyyy871I=",
"ref": "refs/heads/master",
"rev": "3d7c14e55cb8374de6fcd40fcc889aa377131ac2",
"revCount": 6,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/FlakeHelper.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/FlakeHelper.git"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1692799911,
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
"lastModified": 1634851050,
"narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
"rev": "c91f3de5adaf1de973b797ef7485e441a65b8935",
"type": "github"
},
"original": {
@ -78,90 +49,12 @@
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1692799911,
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
"lastModified": 1634851050,
"narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"locked": {
"lastModified": 1638122382,
"narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "74f7e4319258e287b0f9cb95426c9853b282730b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_4": {
"locked": {
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_5": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_6": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_7": {
"locked": {
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"rev": "c91f3de5adaf1de973b797ef7485e441a65b8935",
"type": "github"
},
"original": {
@ -172,14 +65,14 @@
},
"home-manager": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1693859358,
"narHash": "sha256-r3Pak/ao3p8weTzR+Ry3qQrfRsmSOwWW5sAe73mrYKs=",
"lastModified": 1636847964,
"narHash": "sha256-hH2lbDgOPwCtlWDwp0wVCcOK7x0mtLf4nrNWfvUWrA8=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "886ea1d213efd1082f419d066e89ef37635dc970",
"rev": "accfbdf215dbf39eac2fbae67b574dac0be83d51",
"type": "github"
},
"original": {
@ -197,73 +90,27 @@
]
},
"locked": {
"lastModified": 1643933536,
"narHash": "sha256-yRmsWAG4DnLxLIUtlaZsl0kH7rN5xSoyNRlf0YZrcH4=",
"lastModified": 1634544068,
"narHash": "sha256-RlRQBaAHfdWqfRyHdWuDPMkplBTYwuyDQqDcNbP/Sog=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "2860d7e3bb350f18f7477858f3513f9798896831",
"rev": "ff2bed9dac84fb202bbb3c49fdcfe30c29d0b12f",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-21.11",
"repo": "home-manager",
"type": "github"
}
},
"home-stable": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"pkg-stable"
],
"utils": "utils_2"
},
"locked": {
"lastModified": 1679067101,
"narHash": "sha256-tMI1inGT9u4KWQml0w30dhWqQPlth1e9K/68sfDkEQA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "9154cd519a8942728038819682d6b3ff33f321bb",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-22.11",
"repo": "home-manager",
"type": "github"
}
},
"home-unstable": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"pkg-unstable"
],
"utils": "utils_3"
},
"locked": {
"lastModified": 1680597706,
"narHash": "sha256-ZqJ3T+BxzjPH9TnmeUwS4Uu9ZQPeBXAFC9sUWlharT4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ec06f419af79207b33d797064dfb3fc9dbe1df4a",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"ref": "release-21.05",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1640808801,
"narHash": "sha256-iHo8vyuYyhbk5MGfwn/7IahF8dBAwUYTZga4u0UsqPQ=",
"lastModified": 1635517258,
"narHash": "sha256-8iV8f9eZ/5cE0DmG7VmNSiCqpe00yL5HbOO7nZJm1Oo=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "29d781b47b0ee6014abd541c132c647d18ab098e",
"rev": "ce77ed9bd069e57a7a688d360196e576ca63a842",
"type": "github"
},
"original": {
@ -272,142 +119,35 @@
"type": "github"
}
},
"impermanence_2": {
"locked": {
"lastModified": 1668668915,
"narHash": "sha256-QjY4ZZbs9shwO4LaLpvlU2bO9J1juYhO9NtV3nrbnYQ=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "5df9108b346f8a42021bf99e50de89c9caa251c3",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "impermanence",
"type": "github"
}
},
"libwacom-surface": {
"flake": false,
"locked": {
"lastModified": 1665772749,
"narHash": "sha256-UddKdTgEyz43ymr8O/CjT6aTnMtd1Q8OEHj49TGzN5k=",
"owner": "linux-surface",
"repo": "libwacom-surface",
"rev": "0f068fcaa16a6e0450a3324e50632cfdc6a4cf83",
"type": "github"
},
"original": {
"owner": "linux-surface",
"ref": "master",
"repo": "libwacom-surface",
"type": "github"
}
},
"linux-surface": {
"flake": false,
"locked": {
"lastModified": 1672934175,
"narHash": "sha256-HTIuRBZk0prhUPd2KnsXGo+ZyBsMwERN7P8WJH1RG3M=",
"owner": "linux-surface",
"repo": "linux-surface",
"rev": "487e64047ca047dde9a062909a87410e7bb86845",
"type": "github"
},
"original": {
"owner": "linux-surface",
"ref": "master",
"repo": "linux-surface",
"type": "github"
}
},
"naersk": {
"inputs": {
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1639947939,
"narHash": "sha256-pGsM8haJadVP80GFq4xhnSpNitYNQpaXk4cnA796Cso=",
"owner": "nix-community",
"repo": "naersk",
"rev": "2fc8ce9d3c025d59fee349c1f80be9785049d653",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "naersk",
"type": "github"
}
},
"naersk_2": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"ostylk",
"rnix-lsp",
"nixpkgs"
]
},
"locked": {
"lastModified": 1655042882,
"narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=",
"owner": "nix-community",
"lastModified": 1629707199,
"narHash": "sha256-sGxlmfp5eXL5sAMNqHSb04Zq6gPl+JeltIZ226OYN0w=",
"owner": "nmattia",
"repo": "naersk",
"rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f",
"rev": "df71f5e4babda41cd919a8684b72218e2e809fa9",
"type": "github"
},
"original": {
"owner": "nix-community",
"owner": "nmattia",
"repo": "naersk",
"type": "github"
}
},
"nixgl": {
"inputs": {
"flake-utils": "flake-utils_6",
"nixpkgs": [
"ostylk-home",
"pkg-unstable"
]
},
"locked": {
"lastModified": 1661367362,
"narHash": "sha256-Qc8MXcV+YCPREu8kk6oggk23ZBKLqeQRAIsLbHEviPE=",
"owner": "guibou",
"repo": "nixGL",
"rev": "7165ffbccbd2cf4379b6cd6d2edd1620a427e5ae",
"type": "github"
},
"original": {
"owner": "guibou",
"ref": "main",
"repo": "nixGL",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1693718952,
"narHash": "sha256-+nGdJlgTk0MPN7NygopipmyylVuAVi7OItIwTlwtGnw=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "793de77d9f83418b428e8ba70d1e42c6507d0d35",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixos-hardware_2": {
"locked": {
"lastModified": 1637957946,
"narHash": "sha256-zhAql8UR2R/88VCEjvzoVpcFi3k4gkhJayNuYNZaWMY=",
"lastModified": 1636385773,
"narHash": "sha256-2uzAbVH/WFWBvxRfapXrTH3QF/bDgzCnBJlfCVYs02E=",
"owner": "ostylk",
"repo": "nixos-hardware",
"rev": "bf27ac0017bb06c950f2f59a1213329382cb47c5",
"rev": "e660be563819c2be9410fbd20775283f3a2a8d76",
"type": "github"
},
"original": {
@ -419,43 +159,25 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1693663421,
"narHash": "sha256-ImMIlWE/idjcZAfxKK8sQA7A1Gi/O58u5/CJA+mxvl8=",
"lastModified": 1636922351,
"narHash": "sha256-x/jCHAVs4P9QGimbU/UcL7jr0OBvhr41z/L/agMTxwY=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e56990880811a451abd32515698c712788be5720",
"rev": "837604f22c3bd4819f96da7929486d9941d572b8",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1693771906,
"narHash": "sha256-32EnPCaVjOiEERZ+o/2Ir7JH9pkfwJZJ27SKHNvt4yk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "da5adce0ffaff10f6d0fee72a02a5ed9d01b52fc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1649408932,
"narHash": "sha256-JhTW1OtS5fACcRXLqcTTQyYO5vLkO+bceCqeRms13SY=",
"lastModified": 1636267212,
"narHash": "sha256-KDS173KqmqrYUPY9N4vf750GxIo+S6E0djyq2BsQm8s=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "42948b300670223ca8286aaf916bc381f66a5313",
"rev": "c935f5e0add2cf0ae650d072c8357533e21b0c35",
"type": "github"
},
"original": {
@ -467,37 +189,21 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1693565476,
"narHash": "sha256-ya00zHt7YbPo3ve/wNZ/6nts61xt7wK/APa6aZAfey0=",
"owner": "NixOS",
"lastModified": 1636800699,
"narHash": "sha256-SwbyVxXffu3G2ulJIbTf0iQfqhbGbdml4Dyv5j9BiAI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "aa8aa7e2ea35ce655297e8322dc82bf77a31d04b",
"rev": "2fa862644fc15ecb525eb8cd0a60276f1c340c7c",
"type": "github"
},
"original": {
"owner": "NixOS",
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1693663421,
"narHash": "sha256-ImMIlWE/idjcZAfxKK8sQA7A1Gi/O58u5/CJA+mxvl8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e56990880811a451abd32515698c712788be5720",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1618628710,
"narHash": "sha256-9xIoU+BrCpjs5nfWcd/GlU7XCVdnNKJPffoNTxgGfhs=",
@ -510,90 +216,29 @@
"type": "indirect"
}
},
"nixpkgs_5": {
"nixpkgs_4": {
"locked": {
"lastModified": 1649490789,
"narHash": "sha256-YrhVxwoofZSx/wLZ4GYET//8vS+uqWX572zvdmP/Etg=",
"lastModified": 1636333654,
"narHash": "sha256-3wh9PtCzcaJQuZrgZ+ygKfhltkDNNqT6zOzGsRbjZEo=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c86185d20d708013caf97a6adaa8dc6d72313c75",
"rev": "e74894146a42ba552ebafa19ab2d1df7ccbc1738",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-21.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1640233012,
"narHash": "sha256-DNKMmWZ/RLoh5IVJLAa5HYOy4IW28mBBYDMgMxzzom8=",
"path": "/nix/store/gf00nqfl948lq9b8sw2xz3fpirwq5amw-source",
"rev": "611f29bedadfb2aa4c9c26c4af65f05dd35f2f3f",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1645373091,
"narHash": "sha256-eRbiakFKdxtjrqOtErp4BgOJlLN5VEBymldfxy+ZKzI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d0ae0897999e7ba4615e02ca1770df6065099daf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1656753965,
"narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1645373091,
"narHash": "sha256-eRbiakFKdxtjrqOtErp4BgOJlLN5VEBymldfxy+ZKzI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d0ae0897999e7ba4615e02ca1770df6065099daf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable-small",
"ref": "nixos-21.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"locked": {
"lastModified": 1693907142,
"narHash": "sha256-U3yzshaxSUAC6Hy5xGmlX1TySHoWjH++Y2cC9ujEmZc=",
"lastModified": 1636920392,
"narHash": "sha256-mre/JUUA4168Y4NV1nfULPsAbDhwR1uvYI6rf0qvMV0=",
"owner": "nix-community",
"repo": "nur",
"rev": "283964d2452632c9b0ccc8eff08d242a073b022f",
"rev": "faf37248a0b31f65353394924ffaf58da3a8445c",
"type": "github"
},
"original": {
@ -605,104 +250,26 @@
"ostylk": {
"inputs": {
"agenix": "agenix",
"flake-utils": "flake-utils_3",
"flake-utils": "flake-utils_2",
"home-manager": "home-manager_2",
"impermanence": "impermanence",
"nixos-hardware": "nixos-hardware_2",
"nixpkgs": "nixpkgs_5",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_4",
"nixpkgs-unstable": "nixpkgs-unstable",
"rnix-lsp": "rnix-lsp",
"tablet-mode": "tablet-mode"
"rnix-lsp": "rnix-lsp"
},
"locked": {
"lastModified": 1649593958,
"narHash": "sha256-bxslOpHYGXEDZ91plgMjGls5g8++YtSuuDKhIuStUA0=",
"ref": "refs/heads/master",
"rev": "04e73c894cf20c4ac1bf6116546c1dab53d6d4e9",
"revCount": 171,
"lastModified": 1636386099,
"narHash": "sha256-81kCDDzJfcYPl+hI/Oa2MVLrt603ipqXRvfXN4RNA3c=",
"ref": "master",
"rev": "285b4548c52b3c6454186242d6dd9362d80d1545",
"revCount": 141,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/Config.git"
"url": "https://dev.ostylk.de/NixDistro/Config"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/Config.git"
}
},
"ostylk-home": {
"inputs": {
"flake-helper": "flake-helper",
"flake-utils": "flake-utils_5",
"home-stable": "home-stable",
"home-unstable": "home-unstable",
"impermanence": "impermanence_2",
"libwacom-surface": "libwacom-surface",
"linux-surface": "linux-surface",
"nixgl": "nixgl",
"pkg-compile": "pkg-compile",
"pkg-stable": "pkg-stable",
"pkg-unstable": "pkg-unstable",
"rnix-lsp": "rnix-lsp_2"
},
"locked": {
"lastModified": 1683784900,
"narHash": "sha256-h+n0rS4nBFBqlMd1ktn+8UypNP3gQ91e+i/e1zHhbTg=",
"ref": "refs/heads/master",
"rev": "3a0f186fca0a88e0a2fd002eabedb418cf9a6f6a",
"revCount": 124,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/Home.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/Home.git"
}
},
"pkg-compile": {
"locked": {
"lastModified": 1672791794,
"narHash": "sha256-mqGPpGmwap0Wfsf3o2b6qHJW1w2kk/I6cGCGIU+3t6o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9813adc7f7c0edd738c6bdd8431439688bb0cb3d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pkg-stable": {
"locked": {
"lastModified": 1679139072,
"narHash": "sha256-Gtw2Yj8DfETie3u7iHv1y5Wt+plGRmp6nTQ0EEfaPho=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "08ef7dc8334521605a5c8b7086cc248e74ee338b",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"pkg-unstable": {
"locked": {
"lastModified": 1680487167,
"narHash": "sha256-9FNIqrxDZgSliGGN2XJJSvcDYmQbgOANaZA4UWnTdg4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "53dad94e874c9586e71decf82d972dfb640ef044",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
"url": "https://dev.ostylk.de/NixDistro/Config"
}
},
"rnix-lsp": {
@ -715,32 +282,11 @@
"utils": "utils"
},
"locked": {
"lastModified": 1640347520,
"narHash": "sha256-UkieGBW9ap0pQbumYoG60Ed+BpzMRGuLQ6Zb41u7Fkk=",
"lastModified": 1634449716,
"narHash": "sha256-JuRCU4KCIA3/pp8BjHqqF9dj1d2xtpkxKKAtSuOzTIY=",
"owner": "nix-community",
"repo": "rnix-lsp",
"rev": "d7cc2887ac9e65dd01715aac472edbf46b93ed31",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "rnix-lsp",
"type": "github"
}
},
"rnix-lsp_2": {
"inputs": {
"naersk": "naersk_2",
"nixpkgs": "nixpkgs_8",
"utils": "utils_4"
},
"locked": {
"lastModified": 1669555118,
"narHash": "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=",
"owner": "nix-community",
"repo": "rnix-lsp",
"rev": "95d40673fe43642e2e1144341e86d0036abd95d9",
"rev": "a2d06d2d2910cbe35b4f323a54ef484f51d71e20",
"type": "github"
},
"original": {
@ -753,24 +299,21 @@
"root": {
"inputs": {
"emacs": "emacs",
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils",
"home-manager": "home-manager",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3",
"nixpkgs": "nixpkgs_2",
"nur": "nur",
"ostylk": "ostylk",
"ostylk-home": "ostylk-home",
"stable": "stable",
"tablet-mode": "tablet-mode_2"
"stable": "stable"
}
},
"stable": {
"locked": {
"lastModified": 1659914493,
"narHash": "sha256-lkA5X3VNMKirvA+SUzvEhfA7XquWLci+CGi505YFAIs=",
"lastModified": 1636792033,
"narHash": "sha256-5RwKd3+OolhWAPUQG9SNoptr9eks8j2oukKgjAo5NQA=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "022caabb5f2265ad4006c1fa5b1ebe69fb0c3faf",
"rev": "68d4f5970b69b0fd0a95c57c8d0ab4b2b68fb9aa",
"type": "github"
},
"original": {
@ -780,74 +323,6 @@
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tablet-mode": {
"inputs": {
"flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs_7"
},
"locked": {
"lastModified": 1645816436,
"narHash": "sha256-lK69qpgDWE92aQgvG502bU+pGMaHI+y7O3A/AgsUfxI=",
"ref": "master",
"rev": "eeafcf0d0cc3713727697f6a2badc5eea706c81c",
"revCount": 19,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
}
},
"tablet-mode_2": {
"inputs": {
"flake-utils": "flake-utils_7",
"nixpkgs": "nixpkgs_9"
},
"locked": {
"lastModified": 1645816436,
"narHash": "sha256-lK69qpgDWE92aQgvG502bU+pGMaHI+y7O3A/AgsUfxI=",
"ref": "refs/heads/master",
"rev": "eeafcf0d0cc3713727697f6a2badc5eea706c81c",
"revCount": 19,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
}
},
"utils": {
"locked": {
"lastModified": 1629481132,
@ -862,51 +337,6 @@
"repo": "flake-utils",
"type": "github"
}
},
"utils_2": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_3": {
"locked": {
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_4": {
"locked": {
"lastModified": 1656928814,
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",

View File

@ -8,10 +8,7 @@
stable.url = "github:nixos/nixpkgs/nixos-21.05";
emacs.url = "github:nix-community/emacs-overlay";
nur.url = "github:nix-community/nur";
ostylk.url = "git+https://destiny.ostylk.de/gitea/NixDistro/Config.git";
ostylk-home.url = "git+https://destiny.ostylk.de/gitea/NixDistro/Home.git";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
tablet-mode.url = "git+https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git";
ostylk.url = "git+https://dev.ostylk.de/NixDistro/Config";
};
outputs = {
@ -19,7 +16,6 @@
, nixpkgs
, home-manager
, flake-utils
, ostylk-home
, ...
}@inputs: let
inherit (import ./lib/flake.nix {
@ -28,7 +24,7 @@
}) eachDefaultLinuxSystem;
mkSystem = import ./lib/mkSystem.nix {
inherit inputs;
inherit (inputs) nur emacs tablet-mode;
inherit (inputs) nur emacs;
inherit (nixpkgs) lib config;
};
in {
@ -53,12 +49,11 @@
overlays = [
self.overlay
(import ./overlays/sandbox.nix)
];
};
in {
inherit (pkgs) wayqt dfl-ipc dfl-applications dfl-utils qtgreet xwaylandvideobridge obs-cli rgb_keyboard prismlauncher-wrapped anime4k;
# key-mapper only runs on linux
inherit (pkgs) key-mapper;
};
});
}

View File

@ -1,10 +1,6 @@
{ config, lib, pkgs, inputs, ... }:
{ config, lib, pkgs, ... }:
{
imports = with inputs.nixos-hardware.nixosModules; [
common-cpu-intel common-pc-ssd #microsoft-surface
];
fileSystems = {
"/" = {
device = "/dev/disk/by-label/root";
@ -21,12 +17,6 @@
}
];
programs.phosh.enable = true;
environment.systemPackages = with pkgs; [
rnote
];
ptw = {
programs = {
mpv.enable = true;
@ -36,11 +26,9 @@
gnome-terminal.enable = true;
firefox.enable = true;
xournalpp.enable = true;
alacritty.enable = true;
# TODO: Nextcloud client
};
services = {
gdm.enable = true;
gnome.enable = true;
};
system = {
@ -52,6 +40,7 @@
offloading.offload.enable = true;
};
hardware = {
intel.enable = true;
mobile.enable = true;
surface.enable = true;
};
@ -59,7 +48,6 @@
boot = {
kernelParams = [ "mem_sleep_default=deep" "kernel.nmi_watchdog=0" "vm.dirty_writeback_centisecs=1500" ];
kernelPackages = with pkgs; linuxPackagesFor (ostylk-home.packages.x86_64-linux.surface-kernel.override { kernel = kernel_5_16; });
extraModprobeConfig = ''
options i915 enable_fbc=1 enable_rc6=1 modeset=1
options snd_hda_intel power_save=1

View File

@ -1,10 +1,6 @@
{ config, lib, pkgs, inputs, ... }:
{ config, lib, pkgs, ... }:
{
imports = with inputs.nixos-hardware.nixosModules; [
common-cpu-amd common-gpu-amd common-pc-ssd
];
fileSystems = {
"/" = {
device = "/dev/disk/by-label/root";
@ -16,42 +12,39 @@
};
"/mnt/Storage" = {
device = "/dev/disk/by-label/storage";
fsType = "btrfs";
options = [
"noatime"
"nodev"
"nosuid"
];
fsType = "ext4";
};
};
environment.systemPackages = with pkgs; [
gajim
gajim-mainwindow
virt-manager qemu scream
#replaysorcery # Custom package
#vfio-isolate # Custom Package
replaysorcery # Custom package
#evdev-proxy # Custom package
vfio-isolate # Custom Package
steam-wrapped
discord-wrapped # Custom package
superpaper # Custom package
mumble
piper trackma # Custom package
anime-dl # Custom package
piper
anime-dl trackma # Custom package
thunderbird
anki
gimp
xwaylandvideobridge
#psst
#lapce
multimc-wrapped # Custom package
nwg-launchers
gnome-podcasts
cantata
newsflash
];
ptw = {
programs = {
#bluray.enable = true;
mpv = {
primaryScreen = "DP-1";
primaryScreen = "C27F398";
enable = true;
};
sway.enable = false;
sway.enable = true;
alacritty.enable = true;
#emacs.enable = true;
emacs.enable = true;
firefox.enable = true;
git.enable = true;
#gnome-terminal.enable = true;
@ -60,32 +53,48 @@
enable = true;
output = "DP-2";
};
neovim.enable = true;
#xournalpp.enable = true;
xournalpp.enable = true;
zsh.enable = true;
direnv.enable = true;
office.enable = true;
plasma = {
enable = true;
/*sddm = {
backgroundImage = pkgs.fetchurl {
url = "https://cdn.donmai.us/original/d3/1b/__manjuu_prinz_eugen_roon_bismarck_friedrich_der_grosse_and_3_more_azur_lane_drawn_by_zaphn__d31bf4ac564d60f8787818842c369e7f.jpg";
sha256 = "sha256-likoJuEaGzGH0RqjPsBE9o5ATwgnOo97PREh3oZBax8=";
};
};*/
};
gaming.enable = true;
obs.enable = true;
android.enable = true;
};
services = {
yubikey.enable = true;
gamemode.enable = true;
gnome.enable = false;
logiops.enable = true;
gdm = {
enable = false;
#gnome.enable = true;
kanshi = let
horizontal = "Samsung Electric Company C27F398 H4ZR101145";
vertical = "Goldstar Company Ltd IPS235 305NDPHKN600";
helpers = import ../lib/helpers/kanshi.nix;
mkProfile = helpers.mkProfile;
wallpaperScript = helpers.mkWallpaperScript {
inherit pkgs config;
};
in {
enable = true;
profiles = {
homeMultihead = mkProfile {
outputs = [
{
criteria = vertical;
status = "enable";
mode = "1920x1080";
transform = "90";
position = "-1080,0";
}
{
criteria = horizontal;
status = "enable";
mode = "1920x1080";
position = "0,0";
}
];
name = "homeMultihead";
script = wallpaperScript;
};
};
};
swaync.enable = true;
key-mapper.enable = true;
};
system = {
i18n.enable = true;
@ -96,88 +105,58 @@
};
virtualisation = {
enable = true;
gaming.enable = false;
};
};
programs = {
adb.enable = true;
gnupg.agent.pinentryFlavor = "qt";
evolution.enable = true;
};
virtualisation = {
docker = {
podman = {
enable = true;
storageDriver = "btrfs";
dockerCompat = true;
};
};
boot = let
kernel = pkgs.linuxPackages_xanmod_latest;
in {
boot = {
extraModprobeConfig = ''
options kvm_amd nested=1
options vfio-pci ids=1002:67df,1002:aaf0
options amdgpu dpm=0
'';
initrd = {
availableKernelModules = [
"xhci_pci"
"ahci"
"usbhid"
"sd_mod"
"amdgpu"
"vendor-reset"
"winesync"
];
availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "sd_mod" "amdgpu" ]; #"vendor-reset" ];
kernelModules = [
"amdgpu" # GPU (duh)
"kvm-amd" /*"vfio_virqfd"*/ "vfio_pci" "vfio_iommu_type1" "vfio" # Virt
"kvm-amd" "vfio_virqfd" "vfio_pci" "vfio_iommu_type1" "vfio" # Virt
"uinput" # key-mapper
"vendor-reset"
"winesync"
#"vendor-reset"
];
};
kernelParams = [
"amd_iommu=on"
"iommu=on"
"iommu=pt"
"sysrq_always_enabled=1"
"kvm.ignore_msrs=1"
"kvm.report_ignored_msrs=N"
"fbcon=rotate:3"
"quiet"
"clocksource=tsc"
"tsc=reliable"
"pci=noaer"
# Disable mitigations
"mitigations=off"
"rhgb"
# Enable ZSwap
#"zswap.enabled=1"
# Enable Apparmor
"lsm=landlock,lockdown,yama,integrity,apparmor,bpf"
# Prevent sequential probing
"libahci.ignore_sss=1"
# Make the system less ready to swap
"sysctl.vm.swappiness=0"
"tsc=unstable"
];
kernel.sysctl = {
# League of Legends under Linux
"abi.vsyscall32" = 0;
# Fedora 39
"vm.max_map_count" = 2147483642;
};
extraModulePackages = [ kernel.vendor-reset ];
kernelPackages = kernel;
#extraModulePackages = [ pkgs.linuxPackages_xanmod.vendor-reset ];
binfmt = {
emulatedSystems = [ "aarch64-linux" ];
registrations.aarch64-linux.fixBinary = true;
};
#extraModulePackages = [ pkgs.linuxPackages.vendor-reset ];
# NOTE: A regression appears to have happend between 5.10 and 5.12
# which leads to the RX590 to have the fence fallback timer on
# sdma0 time out (whatever this means). Maybe bisect?
kernelPackages = pkgs.linuxPackages_zen;
};
services = {
ratbagd.enable = true;
flatpak.enable = true;
#etesync-dav.enable = true;
etesync-dav.enable = true;
connman.extraConfig = ''
WriteResolvConf=false
'';
@ -185,80 +164,42 @@
enable = true;
layout = "de";
libinput.enable = true;
};
earlyoom.enable = lib.mkForce false;
udev.extraRules = ''
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", ATTR{power/wakeup}="disabled", ATTR{driver/1-7/power/wakeup}="disabled"
'';
hardware = {
openrgb = {
displayManager.gdm = {
enable = true;
motherboard = "amd";
wayland = true;
};
};
system76-scheduler = {
enable = false;
useStockConfig = true;
};
};
programs = {
cdemu = {
enable = true;
gui = true;
};
};
hardware = {
opentabletdriver.enable = true;
openrazer = {
enable = true;
devicesOffOnScreensaver = true;
users = [ "alexander" ];
};
bluetooth = {
enable = true;
powerOnBoot = true;
};
};
# TODO: Move into modules
/*
systemd = {
services = {
enable-vendor-reset = {
wantedBy = [ "default.target" ];
script = ''
echo "device_specific" > /sys/bus/pci/devices/0000:01:00.0/reset_method
'';
serviceConfig = {
Type = "simple";
};
systemd.user.services = {
scream = {
description = "Audio receiver for the Scream virtual network sound card";
#wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.scream}/bin/scream -i virbr0 -o pulse";
Restart = "always";
};
};
user.services = {
replaysorcery-kms = {
description = "An open-source, instant-replay solution for Linux; KMS service";
#wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery kms-service";
Restart = "always";
};
replaysorcery-kms = {
description = "An open-source, instant-replay solution for Linux; KMS service";
#wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery kms-service";
Restart = "always";
};
replaysorcery = {
description = "An open-source, instant-replay solution for Linux";
#wantedBy = [ "default.target" ];
requires = [ "replaysorcery-kms.service" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery";
Restart = "always";
};
};
replaysorcery = {
description = "An open-source, instant-replay solution for Linux";
#wantedBy = [ "default.target" ];
requires = [ "replaysorcery-kms.service" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery";
Restart = "always";
};
};
};
*/
}

View File

@ -1,10 +1,6 @@
{ config, lib, pkgs, inputs, ... }:
{ config, lib, pkgs, ... }:
{
imports = with inputs.nixos-hardware.nixosModules; [
common-cpu-intel common-pc-ssd
];
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/d06b511d-1970-421d-b006-231a7af91942";
@ -18,12 +14,8 @@
swapDevices = [ ]; # TODO
boot = {
initrd = {
availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "sdhci_pci"
"aesni-intel"
# NOTE: See https://github.com/NixOS/nixos-hardware/blob/master/common/pc/laptop/acpi_call.nix
#"acpi_call" ];
];
kernelModules = [ "dm-snapshot" "aesni-intel" ];
availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ];
kernelModules = [ "dm-snapshot" ];
luks.devices = {
cryptroot = {
device = "/dev/disk/by-uuid/e1011c40-e1a9-4ce6-b89f-f14b046639c1";
@ -31,19 +23,14 @@
};
};
};
kernelPackages = pkgs.linuxPackages_xanmod;
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
# NOTE: See https://github.com/NixOS/nixos-hardware/blob/master/lenovo/thinkpad/e495/default.nix#L12
kernelParams = [ "acpi_backlight=native" ];
binfmt.emulatedSystems = ["aarch64-linux"];
};
ptw = {
programs = {
alacritty.enable = true;
sway.enable = false;
sway.enable = true;
emacs.enable = true;
firefox.enable = true;
tmux.enable = true;
@ -53,14 +40,8 @@
};
zsh.enable = true;
git.enable = true;
office.enable = true;
plasma.enable = true;
direnv.enable = true;
};
services = {
yubikey.enable = true;
cups.enable = true;
gnome.enable = false;
kanshi = let
horizontal = "Samsung Electric Company C27F398 H4ZR101145";
@ -116,6 +97,9 @@
primaryInterface = "wlp5s0";
};
virtualisation.enable = true;
hardware = {
intel.enable = true;
};
};
services = {
@ -123,33 +107,19 @@
enable = true;
layout = "de";
libinput.enable = true;
};
};
virtualisation = {
podman = {
enable = true;
dockerCompat = true;
dockerSocket.enable = true;
displayManager.gdm = {
enable = true;
wayland = true;
};
};
};
environment.systemPackages = with pkgs; [
ansible
gnumake
wireguard-tools
(pkgs.callPackage ./wrapper.nix {
inherit (pkgs) retroarch;
cores = with pkgs.libretro; [
mgba mupen64plus melonds desmume dolphin
];
})
];
programs = {
gnupg.agent = {
pinentryFlavor = "qt";
};
gnupg.agent.pinentryFlavor = "qt";
};
}

View File

@ -1,37 +0,0 @@
{ stdenv, lib, makeWrapper, retroarch, cores ? [ ] }:
stdenv.mkDerivation {
pname = "retroarch";
version = lib.getVersion retroarch;
nativeBuildInputs = [ makeWrapper ];
buildCommand = ''
mkdir -p $out/lib
for coreDir in $cores
do
ln -s $coreDir/* $out/lib/.
done
ln -s -t $out ${retroarch}/share
if [ -d ${retroarch}/Applications ]; then
ln -s -t $out ${retroarch}/Applications
fi
makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \
--suffix-each LD_LIBRARY_PATH ':' "$cores" \
--add-flags "-L $out/lib/" \
'';
cores = map (x: x + x.libretroCore) cores;
preferLocalBuild = true;
meta = with retroarch.meta; {
inherit changelog description homepage license maintainers platforms;
longDescription =
"RetroArch is the reference frontend for the libretro API. The following cores are included: "
+ lib.concatStringsSep ", " (map (x: "${x.name}") cores)
+ ".";
};
}

View File

@ -8,14 +8,14 @@ let
in {
time.timeZone = "Europe/Berlin";
ostylk.nftables = {
enable = false;
enable = true;
tables.firewall = {
family = "inet";
chains = {
non-libvirt.extraConfig = let
deviceIPString = lib.concatStringsSep "," (with network; [
miku nishimiya tamaki mashu taihou # ayame
miku nishimiya tamaki mashu # ayame
]);
in ''
# Accept traffic from my devices
@ -33,14 +33,7 @@ in {
};
networking = {
useDHCP = false; # Done by the network manager
networkmanager = {
enable = true;
plugins = with pkgs; [
networkmanager-vpnc
networkmanager-openvpn
networkmanager-openconnect
];
};
networkmanager.enable = true;
#interfaces.*.useDHCP = false;
@ -51,7 +44,6 @@ in {
#"${network.ayame}" = [ "ayame.local" ];
"${network.tamaki}" = [ "tamaki.local" ];
"${network.mashu}" = [ "mashu.local" ];
"${network.taihou}" = [ "taihou.local" ];
};
};
@ -82,12 +74,6 @@ in {
git-crypt
gnupg
python3
unzip
file
ripgrep
# General utilities
bandwhich bottom latencytop
# RT scheduling
rtkit
@ -108,20 +94,16 @@ in {
nerdfonts
];
# For home-manager
programs.dconf.enable = true;
# We don't tolerate non-free software, except for Steam and Linux firmware
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"firmwareLinuxNonfree" "microcodeAmd" "microcodeIntel"
"steam" "steam-original" "steam-runtime" "steam-run"
"discord" "discord-canary"
"minecraft"
"spotify" "spotify-unwrapped"
"steam" "steam-original" "steam-runtime"
"discord"
];
services = {
timesyncd.enable = true;
# TODO: Is this correct? Maybe run once
timesyncd.enable = false;
# Everyone needs sound
pipewire = {
@ -130,96 +112,6 @@ in {
jack.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
/*
config.pipewire = {
"context.modules" = [
{
name = "libpipewire-module-rtkit";
args = {};
flags = [ "ifexists" "nofail" ];
}
{ name = "libpipewire-module-protocol-native"; }
{ name = "libpipewire-module-client-node"; }
{ name = "libpipewire-module-adapter"; }
{ name = "libpipewire-module-metadata"; }
{
name = "libpipewire-module-filter-chain";
args = {
"node.name" = "effect_output.virtual-surround-7.1-hesuvi";
"node.description" = "Virtual Surround Sink";
"media.name" = "Virtual Surround Sink";
"filter.graph" = {
nodes = [
{ type = "builtin"; label = "copy"; name = "copyFL"; }
{ type = "builtin"; label = "copy"; name = "copyFR"; }
{ type = "builtin"; label = "copy"; name = "copyFC"; }
{ type = "builtin"; label = "copy"; name = "copyRL"; }
{ type = "builtin"; label = "copy"; name = "copyRR"; }
{ type = "builtin"; label = "copy"; name = "copySL"; }
{ type = "builtin"; label = "copy"; name = "copySR"; }
{ type = "builtin"; label = "copy"; name = "copyLFE"; }
{ type = "builtin"; label = "convolver"; name = "convFL_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 0; }; }
{ type = "builtin"; label = "convolver"; name = "convFL_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 1; }; }
{ type = "builtin"; label = "convolver"; name = "convSL_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 2; }; }
{ type = "builtin"; label = "convolver"; name = "convSL_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 3; }; }
{ type = "builtin"; label = "convolver"; name = "convRL_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 4; }; }
{ type = "builtin"; label = "convolver"; name = "convRL_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 5; }; }
{ type = "builtin"; label = "convolver"; name = "convFC_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 6; }; }
{ type = "builtin"; label = "convolver"; name = "convFR_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 7; }; }
{ type = "builtin"; label = "convolver"; name = "convFR_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 8; }; }
{ type = "builtin"; label = "convolver"; name = "convSR_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 9; }; }
{ type = "builtin"; label = "convolver"; name = "convSR_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 10; }; }
{ type = "builtin"; label = "convolver"; name = "convRR_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 11; }; }
{ type = "builtin"; label = "convolver"; name = "convRR_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 12; }; }
{ type = "builtin"; label = "convolver"; name = "convFC_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 13; }; }
{ type = "builtin"; label = "convolver"; name = "convLFE_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 6; }; }
{ type = "builtin"; label = "convolver"; name = "convLFE_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 13; }; }
{ type = "builtin"; label = "mixer"; name = "mixL"; }
{ type = "builtin"; label = "mixer"; name = "mixR"; }
];
links = let
linkInput = channel: [
{ output = "copy${channel}:Out"; input = "conv${channel}_L:In"; }
{ output = "copy${channel}:Out"; input = "conv${channel}_R:In"; }
];
linkOutput = channel: n: [
{ output = "conv${channel}_L:Out"; input = "mix_L:In ${builtins.toString n}"; }
{ output = "conv${channel}_R:Out"; input = "mix_R:In ${builtins.toString n}"; }
];
in (builtins.concatMap (channel: linkInput channel) [ "FL" "SL" "RL" "FC" "FR" "SR" "RR" "LFE" ])
++ [
(linkOutput "FL" 1)
(linkOutput "SL" 2)
(linkOutput "RL" 3)
(linkOutput "FC" 4)
(linkOutput "FR" 5)
(linkOutput "SR" 6)
(linkOutput "RR" 7)
(linkOutput "LFE" 8)
];
inputs = builtins.map (channel: "copy${channel}:In") [ "FL" "SL" "RL" "FC" "FR" "SR" "RR" "LFE" ];
outputs = [ "mixL:Out" "mixR:Out" ];
};
"capture.props" = {
"media.class" = "Audio/Sink";
"audio.channels" = 8;
"audio.position" = [ "FL" "FR" "FC" "LFE" "RL" "RR" "SL" "SR" ];
};
"playback.props" = {
"node.passive" = true;
"audio.channels" = 2;
"audio.positions" = [ "FL" "FR" ];
};
};
}
];
};
*/
};
# On desktop: Monitor keyboards, mice, ...
@ -227,7 +119,7 @@ in {
upower.enable = true;
# What generated entropy?
#haveged.enable = true;
haveged.enable = true;
printing.enable = lib.mkDefault false;
avahi.enable = false;
@ -244,10 +136,7 @@ in {
};
# Don't wait for a network connection
systemd = {
services.NetworkManager-wait-online.enable = false;
coredump.enable = false;
};
systemd.services.NetworkManager-wait-online.enable = false;
security.sudo.extraConfig = ''
Defaults env_keep += "NIXOS_CONFIG"
@ -274,25 +163,14 @@ in {
nix = {
package = pkgs.nixUnstable;
extraOptions = ''
experimental-features = nix-command flakes
experimental-features = nix-command flakes ca-references
'';
registry = {
nixpkgs.flake = inputs.nixpkgs;
};
settings = {
substituters = [
"https://cache.nixos.org/" # Official binary substitute
"https://nix-community.cachix.org/" # For emacsGccPgtk
];
trusted-public-keys = [
"hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs=" # Official binary substitute
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" # nix-community
];
};
};
boot = {
tmp.cleanOnBoot = true;
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;

View File

@ -15,7 +15,6 @@ Idea: Make miku.nix, mashu.nix, ... have the following structure
{
hostConfigFile
, architecture ? "x86_64-linux"
, bluray ? false
}: let
pkgs = inputs.nixpkgs;
config = pkgs.lib;
@ -38,27 +37,18 @@ in inputs.nixpkgs.lib.nixosSystem {
# Overlays
(util.mkOverlayFromInput "stable" inputs.stable)
(util.mkOverlayFromInput "unstable" inputs.nixpkgs)
{
nixpkgs.overlays = [
nur.overlay
emacs.overlay
(import ../packages)
(import ../overlays/simple.nix)
(import ../overlays/phosh.nix)
]
++ lib.optional bluray (import ../overlays/bluray.nix)
++ [
# Always keep sandbox.nix as the last overlay
(import ../overlays/sandbox.nix)
];
}
# My module system
(import ../modules)
inputs.ostylk.nixosModules.nftables
inputs.tablet-mode.nixosModule
# Actual config
(import ./baseSystem.nix)

View File

@ -2,9 +2,8 @@ rec {
network-base = "192.168.178";
# A collection of IP addresses for various uses
miku = "${network-base}.60";
miku = "${network-base}.38";
nishimiya = "${network-base}.59";
tamaki = "${network-base}.27";
mashu = "${network-base}.54";
taihou = "${network-base}.21";
}

BIN
lib/ports.nix Normal file

Binary file not shown.

View File

@ -1,196 +0,0 @@
{
stdenv, lib
, runCommandLocal, writeShellScriptBin, makeDesktopItem
, bubblewrap, coreutils, glibc, pkgsi686Linux
}:
{
name # Name of the sandboxed package, e.g. "package-wrapped"
, launchScriptName # Name of the script that will be placed in $out/bin
, binary # The binary to execute inside the sandbox
, extraArgs ? [] # Extra arguments to add to the argv
, desktopFileAttributes ? {} # Arguments to apply to the desktop file
, preDesktopFilePhase ? "" # Code to run during the install phase before building the desktop file
, enableDesktopFile ? false # Whether to build a desktop file
, copyIntoSandbox ? {} # Source -> destination relative to $out
, unshareUser ? true
, unshareIpc ? true
, unsharePid ? true
, unshareNet ? false
, unshareUts ? true
, unshareCgroup ? true
, dieWithParent ? true # Should bubblewrap exit when the parents exits
, mountInHome ? [] # Files, directories to mount inside the sandbox
, chdirTo ? "\"$(pwd)\"" # What should be the CWD when entering the sandbox
, additionalBlacklist ? [] # Root directories that should not be mounted
, additionalMounts ? [] # Files, directories outside the home directory to mount inside the sandbox
, extraEnv ? {} # Extra environment variables to set inside the sandbox
, enableAlsa ? true # Mount ALSA files from /etc/
, enableSudo ? true # Mount sudo files from /etc/
, enableShells ? true # Mount shell related files from /etc/
, enableNix ? true # Mount nix related files from /etc/
, enableOsInfo ? true # Mount /etc/{machine-id,os-release}
}:
let
mountHome = mountInHome == [];
etcBindFlags = let
files = [
# Users, Groups, NSS
"passwd"
"group"
"shadow"
"hosts"
"resolv.conf"
"nsswitch.conf"
# User profiles
"profiles"
# Time
"localtime"
"zoneinfo"
# PAM
"pam.d"
# Fonts
"fonts"
]
++ (lib.optionals enableNix [ "static" "nix" ])
++ (lib.optionals enableShells [ "bashrc" "zshenv" "zshrc" "zinputrc" "zprofile" ])
++ (lib.optionals enableSudo [ "login.defs" "sudoers" "sudoers.d" ])
++ (lib.optionals enableAlsa [ "alsa" "asound.conf" ])
++ (lib.optionals enableOsInfo [ "machine-id" "os-release" ])
# Only add SSL stuff when we have networking enabled
++ (lib.optionals (!unshareNet) [ "ssl/certs" "pki" ]);
in builtins.concatStringsSep "\n " (map (file: "--ro-bind-try /etc/${file} /etc/${file}") files);
# Create this on the fly instead of linking from /nix
# The container might have to modify it and re-run ldconfig if there are
# issues running some binary with LD_LIBRARY_PATH
createLdConfCache = ''
cat > /etc/ld.so.conf <<EOF
/lib
/lib/x86_64-linux-gnu
/lib64
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib64
/lib/i386-linux-gnu
/lib32
/usr/lib/i386-linux-gnu
/usr/lib32
EOF
ldconfig &> /dev/null
'';
sandboxInitScriptName = "${name}-wrapped-init.sh";
sandboxInitScript = writeShellScriptBin sandboxInitScriptName ''
source /etc/profile
${createLdConfCache}
exec ${binary} "$@"
'';
sandboxScriptName = "${name}-wrapped.sh";
sandboxScript = let
extraEnvString = lib.foldl (acc: val: acc + val + "\n") "" (lib.mapAttrsToList (name: value: "--setenv ${name} \"${value}\"") extraEnv);
stringify = x: "\"${x}\"";
safeAdditionalMounts = map stringify additionalMounts;
safeMountInHome = map stringify mountInHome;
in writeShellScriptBin sandboxScriptName ''
blacklist=(/nix /dev /proc /etc ${lib.optionalString (!mountHome) "/home"} ${builtins.toString additionalBlacklist})
ro_mounts=()
symlinks=()
declare -a auto_mounts
# loop through all directories in the root
for dir in /*; do
# if it is a directory and it is not in the blacklist
if [[ -d "$dir" ]] && [[ ! "''${blacklist[@]}" =~ "$dir" ]]; then
# add it to the mount list
auto_mounts+=(--bind "$dir" "$dir")
fi
done
if [[ "${lib.optionalString (!mountHome) "1"}" = "1" ]]; then
for entry in ${builtins.toString safeMountInHome}; do
auto_mounts+=(--bind "/home/$USER/$entry" "/home/$USER/$entry")
done
fi
if [[ ! -z "${builtins.toString additionalMounts}" ]]; then
for entry in ${builtins.toString safeAdditionalMounts}; do
auto_mounts+=(--bind "$entry" "$entry")
done
fi
cmd=(
${bubblewrap}/bin/bwrap
--dev-bind /dev /dev
--proc /proc
--chdir ${chdirTo}
${lib.optionalString unshareUser "--unshare-user"}
${lib.optionalString unshareIpc "--unshare-ipc"}
${lib.optionalString unsharePid "--unshare-pid"}
${lib.optionalString unshareNet "--unshare-net"}
${lib.optionalString unshareUts "--unshare-uts"}
${lib.optionalString unshareCgroup "--unshare-cgroup"}
${lib.optionalString dieWithParent "--die-with-parent"}
--ro-bind /nix /nix
# Our glibc will look for the cache in its own path in `/nix/store`.
# As such, we need a cache to exist there, because pressure-vessel
# depends on the existence of an ld cache. However, adding one
# globally proved to be a bad idea (see #100655), the solution we
# settled on being mounting one via bwrap.
# Also, the cache needs to go to both 32 and 64 bit glibcs, for games
# of both architectures to work.
--tmpfs ${glibc}/etc \
--symlink /etc/ld.so.conf ${glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${glibc}/etc/ld.so.cache \
--ro-bind ${glibc}/etc/rpc ${glibc}/etc/rpc \
--remount-ro ${glibc}/etc \
--tmpfs ${pkgsi686Linux.glibc}/etc \
--symlink /etc/ld.so.conf ${pkgsi686Linux.glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${pkgsi686Linux.glibc}/etc/ld.so.cache \
--ro-bind ${pkgsi686Linux.glibc}/etc/rpc ${pkgsi686Linux.glibc}/etc/rpc \
--remount-ro ${pkgsi686Linux.glibc}/etc \
${etcBindFlags}
"''${ro_mounts[@]}"
"''${symlinks[@]}"
"''${auto_mounts[@]}"
${extraEnvString}
${sandboxInitScript}/bin/${sandboxInitScriptName}
)
exec "''${cmd[@]}" $@
'';
in stdenv.mkDerivation {
pname = name;
version = "1.0.0";
unpackPhase = ":";
dontBuild = true;
installPhase = let
desktopFilePhase = let
desktopFile = makeDesktopItem (desktopFileAttributes // {
exec = "${sandboxScript}/bin/${sandboxScriptName}";
});
in ''
cp -r ${desktopFile}/share/applications $out/share
'';
copyIntoSandboxPhase = let
attrs = builtins.attrNames copyIntoSandbox;
cps = map (x: "cp -Lr ${x} $out/${copyIntoSandbox."${x}"}\n") attrs;
in lib.concatStrings cps;
in ''
mkdir -p $out/bin
ln -s ${sandboxScript}/bin/${sandboxScriptName} $out/bin/${launchScriptName}
# Generate the desktop file, if enabled
${lib.optionalString enableDesktopFile "mkdir -p $out/share"}
${lib.optionalString enableDesktopFile preDesktopFilePhase}
${lib.optionalString enableDesktopFile desktopFilePhase}
# Copy extra files if they are specified
${lib.optionalString (copyIntoSandbox != {}) copyIntoSandboxPhase}
'';
}

View File

@ -1,19 +1,20 @@
{
imports = [
# Hardware modules
./hardware/amdgpu.nix
./hardware/amd.nix
./hardware/intel.nix
./hardware/mobile.nix
./hardware/surface-pro6.nix
./hardware/wifi.nix
# Programs
./programs/alacritty
./programs/emacs
./programs/firefox
./programs/gnome
./programs/gdm
./programs/sddm
./programs/gnome-terminal
./programs/mpv
./programs/neovim
./programs/git
./programs/sway
./programs/swaync
@ -21,22 +22,13 @@
./programs/waybar
./programs/zsh
./programs/xournalpp
./programs/office
./programs/gaming
./programs/bluray
./programs/direnv
./programs/obs
./programs/android
./programs/plasma
# Services
./services/kanshi
./services/input-remapper
./services/key-mapper
./services/gamemode
./services/i18n
./services/greetd
./services/cups
./services/logiops
./services/yubikey
# User
#./users/default.nix
@ -51,14 +43,7 @@
./virtualisation/default.nix
./virtualisation/gaming.nix
# Security
./security/apparmor.nix
# Pure options
./base.nix
# Desktop
./desktop/phosh.nix
./desktop/plasma.nix
];
}

View File

@ -1,29 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.desktop.phosh;
in {
options.ptw.desktop.phosh = {
enable = lib.mkEnableOption "Enable Phosh";
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.ptw.services.gdm.enable == false;
message = "Phosh conflicts GDM";
}
{
assertion = config.services.xserver.displayManager.sddm.enable == false;
message = "Phosh conflicts SDDM";
}
];
services.xserver.desktopManager.phosh = {
user = config.ptw.system.singleUser;
group = "users";
#package = pkgs.phosh;
enable = true;
};
};
}

View File

@ -1,158 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.plasma;
in {
options.ptw.programs.plasma = {
enable = lib.mkEnableOption "Enable KDE Plasma";
mobile = {
enable = lib.mkEnableOption "Enable Plasma Mobile";
};
wayland = {
enable = lib.mkOption {
default = true;
description = "Ignore NixOS 'recommendations' and use the Wayland session by default";
};
};
/*sddm = {
backgroundImage = lib.mkOption {
default = "${pkgs.sddm-sugar-dark}/usr/share/sddm/themes/sugar-dark/Background.jpg";
description = "The background image to use with sddm-sugar-dark";
};
screenWidth = lib.mkOption {
default = 1920;
description = "Width of the screen";
};
screenHeight = lib.mkOption {
default = 1080;
description = "Width of the screen";
};
};*/
};
config = lib.mkIf cfg.enable {
security.pam.services = {
login.enableKwallet = true;
greetd.enableKwallet = true;
};
services.xserver = {
desktopManager.plasma5 = {
enable = true;
runUsingSystemd = true;
mobile.enable = cfg.mobile.enable;
kdeglobals = lib.mkIf cfg.mobile.enable {
KDE = {
StartDragDist = "10";
LookAndFeelPackage = "org.kde.plasma.phone";
};
Icons = {
Theme = "breeze";
};
General = {
ColorScheme = "breeze";
Name = "breeze";
XftHintStyle = "none";
XftSubPixel = "none";
shadeSortColumn = "true";
};
};
kwinrc = lib.mkIf cfg.mobile.enable {
Plugins = {
"org.kde.phone.multitaskingEnabled" = "false";
"kwin4_effect_eyeonscreenEnabled" = "false";
"kwin4_effect_windowapertureEnabled" = "false";
blurEnabled = "false";
contrastEnabled = "false";
};
Windows = {
Placement = "Maximizing";
};
TabBox = {
TouchBorderActive = "9";
TouchBorderAlternativeActive = "9";
BorderActivate = "9";
};
"Effect-PresentWindows" = {
BorderActivateAll = "9";
};
"org.kde.kdecoration2" = {
NoPlugin = "true";
};
TouchEdges = {
Left = "None";
Right = "None";
};
Wayland = {
InputMethod = "${pkgs.maliit-keyboard}/usr/share/applications/com.github.maliit.keyboard.desktop";
};
};
};
# See https://github.com/NixOS/nixpkgs/commit/a506f9c79700255c215dddb53455d5e2bed6c1af
displayManager = {
sddm = {
enable = true;
};
defaultSession = lib.mkIf cfg.wayland.enable "plasmawayland";
#sessionPackages = lib.mkIf cfg.mobile.enable [ pkgs.libsForQt5.plasma5.plasma-mobile ];
};
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [ xdg-desktop-portal-kde xdg-desktop-portal-gtk ];
};
environment = {
systemPackages = let
plasmaMobilePackages = with pkgs.libsForQt5; with plasma5; with kdeApplications; with kdeFrameworks; [
plasma-mobile
plasma-nano
pkgs.maliit-framework
pkgs.maliit-keyboard
];
kdePackages = with pkgs.libsForQt5; [
okular
kdeconnect-kde
breeze-gtk
#bismuth
gwenview
yakuake
kdeplasma-addons
plasma-nm
] ++ lib.optionals cfg.mobile.enable plasmaMobilePackages;
packages = with pkgs; [
kde-rounded-corners
index-fm
rsibreak
kalendar
kate
okular
ark
kcalc
# Some Gnome software
gnome.totem
];
in kdePackages ++ packages;
sessionVariables = let
askPass = "${pkgs.libsForQt5.ksshaskpass}/bin/ksshaskpass";
in {
SSH_ASKPASS = askPass;
SSH_ASKPASS_REQUIRE = "prefer";
GIT_ASKPASS = askPass;
};
};
};
}

13
modules/hardware/amd.nix Normal file
View File

@ -0,0 +1,13 @@
{ config, lib, ... }:
let
cfg = config.ptw.hardware.amdcpu;
in {
options.ptw.hardware.amdcpu = {
enable = lib.mkEnableOption "Enable support for AMD CPUs";
};
config = lib.mkIf cfg.enable {
hardware.cpu.amd.updateMicrocode = true;
};
}

View File

@ -0,0 +1,19 @@
{
config, lib, pkgs, ...
}:
let
cfg = config.ptw.hardware.amdgpu;
in {
options.ptw.hardware.amdgpu = {
enable = lib.mkEnableOption "Enable support for AMDGPU GPUs";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
unstable.mesa
unstable.firmwareLinuxNonfree
];
services.xserver.videoDrivers = [ "amdgpu" ];
};
}

View File

@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.hardware.intel;
in {
options.ptw.hardware.intel = {
enable = lib.mkEnableOption "Enable support for Intel CPUs";
};
config = lib.mkIf cfg.enable {
hardware = {
cpu.intel.updateMicrocode = true;
# NOTE: Assuming each Intel CPU has integrated graphics
opengl.extraPackages = with pkgs; [ vaapiIntel intel-media-driver ];
};
# TODO: Remove?
services.xserver.videoDrivers = [ "modesetting" "fbdev" ];
};
}

View File

@ -1,9 +1,18 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.hardware.surface;
fetchurl = pkgs.fetchurl;
commit = "69d1e5826e6380c8ff0cd532e244482097562c3d";
commit = "821d8f0685ebad0fa2c05c7080f45eafb28ad08c";
kernelVersion = "5.14";
mkPatch = name: sha256: {
name = name;
patch = fetchurl {
inherit sha256;
url = "https://raw.githubusercontent.com/linux-surface/linux-surface/${commit}/patches/${kernelVersion}/${name}.patch";
};
};
cfg = config.ptw.hardware.surface;
in {
options.ptw.hardware.surface = {
enable = lib.mkEnableOption "Enable support for the Microsoft Surface Pro 6";
@ -27,7 +36,7 @@ in {
};
hardware.video.hidpi.enable = true;
systemd.services.iptsd = lib.mkForce {
systemd.services.iptsd = {
description = "Userspace daemon for Intel Precise Touch & Stylus";
wantedBy = [ "multi-user.target" ];
wants = [ "dev-ipts-15.device" ];
@ -47,32 +56,103 @@ in {
sha256 = "1xj70n9agy41906jgm4yjmsx58i7pzsizpvv3rkzq78k95qjfmc9";
};
};
# from dev.ostylk.de/NixDistro/tablet-mode.git
tablet-mode.enable = true;
};
boot = {
kernelPackages = pkgs.linuxPackages_5_14;
kernelPatches = [
(mkPatch "0001-surface3-oemb" "0ji3glnbaiy10kzi2zi80278vyf0pp23s7dqx8pwirbqxi6pygnp")
(mkPatch "0002-mwifiex" "0d7jpfiyb74i5fm2gdhwa5bi9kd7ff4mb75yss0lvidga10r9hmp")
(mkPatch "0003-ath10k" "0a6iwdw5wkjd24bnz32msncr1am2db36x6qpf652rx12czia8ndj")
(mkPatch "0004-ipts" "0ib7bnh4xanz5cakr50nirshhzn3rb29x9kq4m0snp38fhyaa8dv")
(mkPatch "0005-surface-sam" "19yjxgznhv65g1v6dcv6fklahi2inmf7gllbzmh6k98r3531kzjg")
(mkPatch "0006-surface-sam-over-hid" "0np7zf8328yxy9xzbipqjw014kzy0kmm67c046fmgmvniibixvs7")
(mkPatch "0007-surface-gpe" "164hhw0jh800qxmwiahw4hdsprghm760i8c6pwq89mh440wkfxnk")
(mkPatch "0008-surface-button" "0w03azjlhwdz9isjc5swlpimj48zx7jgjws6ws8xxlb37vbg4lq6")
(mkPatch "0009-surface-typecover" "0s2i13x780zmwbksv4rk1lryrv6n6mvc49ljn3zdy4d9yy10x272")
(mkPatch "0010-cameras" "0vwz609vbrracc8qm1jzm471ls4imqlilf3hh2whsb2w2npmd0kf")
(mkPatch "0011-amd-gpio" "09xjc0fl9vccz1nks6v62359digrk92svr75qz9zcvfmpyxg18z7") # TODO: Maybe drop
{
name = "surface-config";
patch = null;
# Options from https://github.com/linux-surface/linux-surface/blob/master/configs/surface-5.13.config
extraConfig = ''
#
# Other
#
# Prevent a non-fatal "kernel oops" at boot crashing udev
# (https://github.com/linux-surface/linux-surface/issues/61#issuecomment-579298172)
PINCTRL_INTEL y
PINCTRL_SUNRISEPOINT y
# Required for reading battery data
# (https://github.com/linux-surface/surface-aggregator-module/wiki/Testing-and-Installing)
SERIAL_DEV_BUS y
SERIAL_DEV_CTRL_TTYPORT y
MFD_INTEL_LPSS_PCI y
INTEL_IDMA64 y
'';
#
# Surface Aggregator Module
#
SURFACE_AGGREGATOR m
SURFACE_AGGREGATOR_ERROR_INJECTION n
SURFACE_AGGREGATOR_BUS y
SURFACE_AGGREGATOR_CDEV m
SURFACE_AGGREGATOR_REGISTRY m
SURFACE_ACPI_NOTIFY m
SURFACE_DTX m
SURFACE_PLATFORM_PROFILE m
SURFACE_HID m
SURFACE_KBD m
BATTERY_SURFACE m
CHARGER_SURFACE m
#
# Surface Hotplug
#
SURFACE_HOTPLUG m
#
# IPTS touchscreen
#
# This only enables the user interface for IPTS data.
# For the touchscreen to work, you need to install iptsd.
#
MISC_IPTS m
#
# Cameras: IPU3
#
#VIDEO_IPU3_IMGU m
VIDEO_IPU3_CIO2 m
CIO2_BRIDGE y
#INTEL_SKL_INT3472 m
#
# Cameras: Sensor drivers
#
#VIDEO_OV5693 m
VIDEO_OV8865 m
#
# ALS Sensor for Surface Book 3, Surface Laptop 3, Surface Pro 7
#
APDS9960 m
#
# Other Drivers
#
INPUT_SOC_BUTTON_ARRAY m
SURFACE_3_BUTTON m
SURFACE_3_POWER_OPREGION m
SURFACE_PRO3_BUTTON m
SURFACE_GPE m
SURFACE_BOOK1_DGPU_SWITCH m
#
# Other
#
# Prevent a non-fatal "kernel oops" at boot crashing udev
# (https://github.com/linux-surface/linux-surface/issues/61#issuecomment-579298172)
PINCTRL_INTEL y
PINCTRL_SUNRISEPOINT y
# Required for reading battery data
# (https://github.com/linux-surface/surface-aggregator-module/wiki/Testing-and-Installing)
SERIAL_DEV_BUS y
SERIAL_DEV_CTRL_TTYPORT y
MFD_INTEL_LPSS_PCI y
INTEL_IDMA64 y
'';
}
];
};

BIN
modules/hardware/wifi.nix Normal file

Binary file not shown.

View File

@ -10,7 +10,7 @@ in {
config = lib.mkIf cfg.enable {
boot.binfmt.emulatedSystems = [ "i686-linux" "aarch64-linux" ]; # For remote building
environment.systemPackages = with pkgs; [ openssh ];
nix.settings.trusted-users = [ "builder" ];
nix.trustedUsers = [ "builder" ];
# TODO: Specify a firewall rule to only allow this from my other NixOS machines
users = {

View File

@ -30,7 +30,6 @@ in {
dynamic_title = true;
decorations = "full";
startup_mode = "Windowed";
#opacity = 0.7;
};
scrolling = {
@ -48,6 +47,7 @@ in {
x = 0;
y = 0;
};
use_thin_strokes = true;
};
debug = {
render_timer = false;
@ -83,6 +83,7 @@ in {
};
};
background_opacity = 0.7;
mouse_bindings = [ {
mouse = "Middle";
action = "PasteSelection";
@ -110,6 +111,7 @@ in {
live_config_reload = true;
enable_experimental_conpty_backend = false;
alt_send_esc = true;
key_bindings = [
{

View File

@ -1,15 +0,0 @@
{ pkgs, lib, config, ... }:
let
cfg = config.ptw.programs.android;
in {
options.ptw.programs.android = {
enable = lib.mkEnableOption "Enable Android development options";
};
config = lib.mkIf cfg.enable {
environment.variables = {
"ANDROID_HOME" = "/home/alexander/Development/Android/Sdk";
};
};
}

View File

@ -1,15 +0,0 @@
{ pkgs, config, lib, ... }:
let
cfg = config.ptw.programs.bluray;
in {
options.ptw.programs.bluray = {
enable = lib.mkEnableOption "Enable bluray playback and decoding. Will rebuild a lot of packages";
};
config = lib.mkIf cfg.enable {
nixpkgs.config.overlays = [
(import ../../../overlays/bluray.nix)
];
};
}

View File

@ -1,19 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.direnv;
in {
options.ptw.programs.direnv = {
enable = lib.mkEnableOption "Enable direnv";
};
config = lib.mkIf cfg.enable {
home-manager.users."${config.ptw.system.singleUser}".programs.direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv = {
enable = true;
};
};
};
}

View File

@ -9,19 +9,17 @@ let
rev = "e89a63a62e071180c9cdd9067679fadc3f7bf796";
sha256 = "0gxlz9b7fvbjkqxsyb4l75g7jsxyms0i1vpnb6y499hl115akcaz";
};
in {
options.ptw.programs.emacs = {
enable = lib.mkEnableOption "Configure emacs";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ emacs28NativeComp ];
services.emacs.package = pkgs.emacs28NativeComp;
environment.systemPackages = with pkgs; [ emacsPgtkGcc ];
services.emacs.package = pkgs.emacsPgtkGcc;
home-manager.users."${config.ptw.system.singleUser}" = {
home.file = {
#".emacs".text = builtins.replaceStrings [ "%%DARTLANG_ANALYSIS_SERVER_PATH%%" "" ] (builtins.readFile ./dotemacs);
".emacs".source = ./dotemacs;
".emacs.d/mu4e.el".source = ./mu4e.el;
".emacs.d/themes/weyland-yutani-theme.el".source = "${weyland-yutani}/weyland-yutani-theme.el";
@ -50,8 +48,6 @@ in {
json-mode
rust-mode
yaml-mode
lsp-mode lsp-treemacs flycheck company
dart-mode lsp-dart
];
};
};

View File

@ -7,10 +7,8 @@
(setq redisplay-dont-pause t)
(setq jit-lock-defer-time 0)
(setq fast-but-imprecise-scrolling t)
(setq make-backup-files nil) (setq create-lockfiles nil)
; Disable the bell sounds
(setq ring-bell-function 'ignore)
(setq make-backup-files nil)
(setq create-lockfiles nil)
;; A trick for faster startup is to just disable GC for the init phase
;;; See: https://github.com/nilcons/emacs-use-package-fast#a-trick-less-gc-during-startup
@ -92,7 +90,6 @@
(smartparens-global-mode t))
(use-package undo-tree
:config
(setq undo-tree-auto-save-history nil)
(global-undo-tree-mode))
(setq-default indent-tab-mode t)
@ -211,18 +208,6 @@
(use-package json-mode)
(use-package rust-mode)
(use-package yaml-mode)
(add-hook 'dart-mode-hook 'lsp)
(setq lsp-lens-enable t
lsp-signature-auto-activate nil
company-minimum-prefix-length 1
read-process-output-max (* 1024 1024))
(use-package lsp-mode
:init
(setq lsp-keymap-prefix "C-c l")
:hook (
(dart-mode . lsp)
)
:commands lsp)
;; Debugging
;(use-package explain-pause-mode

View File

@ -24,18 +24,17 @@ in {
home-manager.users."${config.ptw.system.singleUser}".programs.firefox = {
enable = true;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
https-everywhere
ublock-origin
umatrix
decentraleyes
privacy-redirect
];
profiles.default = {
id = 0; # NOTE: This is important
isDefault = true;
name = "Default Profile";
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
#https-everywhere
ublock-origin
umatrix
decentraleyes
privacy-redirect
];
settings = {
"browser.search.suggest.enabled" = false;
"browser.tabs.drawInTitlebar" = true;

View File

@ -1,59 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.gaming;
in {
options.ptw.programs.gaming = {
enable = lib.mkEnableOption "Configure gaming options";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
# General wine
wineWowPackages.staging winetricks
protontricks
# Lutris for League
lutris-free-wrapped
# prismlauncher-wrapped
# retroarch for retro games
(pkgs.callPackage ./wrapper.nix {
inherit (pkgs) retroarch;
cores = with pkgs.libretro; [
mgba mupen64plus melonds desmume dolphin pcsx2
];
})
#steam-wrapped # Custom package
# Gameplay clip recording
(pkgs.wrapOBS {
plugins = with pkgs.obs-studio-plugins; [
obs-vaapi obs-vkcapture obs-pipewire-audio-capture
];
})
obs-cli
# Gameplay clip editing
kdenlive
# Performance
corectrl
];
programs.gamescope = {
enable = true;
capSysNice = true;
args = ["--rt"];
};
# security.wrappers.gamescope = {
# owner = "alexander";
# group = "alexander";
# source = "${pkgs.gamescope}/bin/gamescope";
# capabilities = "CAP_SYS_NICE=eip";
# };
hardware.steam-hardware.enable = true;
};
}

View File

@ -1,37 +0,0 @@
{ stdenv, lib, makeWrapper, retroarch, cores ? [ ] }:
stdenv.mkDerivation {
pname = "retroarch";
version = lib.getVersion retroarch;
nativeBuildInputs = [ makeWrapper ];
buildCommand = ''
mkdir -p $out/lib
for coreDir in $cores
do
ln -s $coreDir/* $out/lib/.
done
ln -s -t $out ${retroarch}/share
if [ -d ${retroarch}/Applications ]; then
ln -s -t $out ${retroarch}/Applications
fi
makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \
--suffix-each LD_LIBRARY_PATH ':' "$cores" \
--add-flags "-L $out/lib/" \
'';
cores = map (x: x + x.libretroCore) cores;
preferLocalBuild = true;
meta = with retroarch.meta; {
inherit changelog description homepage license maintainers platforms;
longDescription =
"RetroArch is the reference frontend for the libretro API. The following cores are included: "
+ lib.concatStringsSep ", " (map (x: "${x.name}") cores)
+ ".";
};
}

View File

@ -1,22 +0,0 @@
{ pkgs, config, lib, ... }:
let
cfg = config.ptw.services.gdm;
in {
options.ptw.services.gdm = {
enable = lib.mkEnableOption "Enable GDM as a display manager";
monitors = lib.mkOption {
description = "The file to use as a monitors.xml";
};
};
config = lib.mkIf cfg.enable {
services.xserver.displayManager.gdm = {
wayland = true;
enable = true;
# TODO: Use monitors.xml
# job
};
};
}

View File

@ -12,9 +12,6 @@ in {
enable = true;
userEmail = "papatutuwawa@polynom.me";
userName = "Alexander \"PapaTutuWawa\"";
# The key on my Yubikey
signing.key = "B688F70D0EC87D5A8A9D3D7A56C749835F3CE824";
extraConfig = {
init = {
defaultBranch = "master";

View File

@ -10,41 +10,25 @@ in {
config = lib.mkIf cfg.enable {
environment = {
systemPackages = with pkgs; [
# Themes
arc-theme
libsForQt5.qtstyleplugin-kvantum
# Gnome Shell Extensions
gnomeExtensions.appindicator
gnomeExtensions.caffeine
gnomeExtensions.gnome-40-ui-improvements
gnomeExtensions.notification-timeout
gnomeExtensions.window-is-ready-remover
gnomeExtensions.notification-timeout # Custom package
gnomeExtensions.windowisready-remover # Custom package
gnomeExtensions.application-volume-mixer
gnomeExtensions.tiling-assistant
gnomeExtensions.tilingnome
gnomeExtensions.tray-icons-reloaded
gnomeExtensions.gsconnect
gnomeExtensions.blur-my-shell
gnomeExtensions.forge
gnomeExtensions.dash-to-dock
gnomeExtensions.sound-output-device-chooser
# Programs
gnome.eog
gnome.nautilus
gnome.evince
unstable.gnome.gnome-shell
gnome.gnome-terminal
gnome-console
pinentry-gnome
mousai
gnome.geary
gnome.gnome-calendar
gnome.gedit
# For config
dconf # For home-manager
libsForQt5.qtstyleplugin-kvantum
];
gnome.excludePackages = pkgs.gnome.optionalPackages;
};
services = {
@ -53,7 +37,7 @@ in {
geoclue2.enable = false;
dleyna-renderer.enable = false;
dleyna-server.enable = false;
gvfs.enable = true;
gvfs.enable = lib.mkForce false;
telepathy.enable = false;
gnome = {
chrome-gnome-shell.enable = false;
@ -77,29 +61,27 @@ in {
libinput.enable = true;
desktopManager.gnome.enable = true;
displayManager.gdm = {
enable = true;
wayland = true;
};
};
};
xdg.portal = {
enable = true;
#extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
#gtkUsePortal = true;
};
qt5 = {
style = "adwaita-dark";
platformTheme = "gnome";
enable = true;
gtkUsePortal = true;
};
home-manager.users."${config.ptw.system.singleUser}" = {
#xdg.configFile = {
# # Make QT apps use a dark theme
# "Kvantum/kvantum.kvconfig".text = ''
# [General]
# theme=KvArcDark
# '';
#};
xdg.configFile = {
# Make QT apps use a dark theme
"Kvantum/kvantum.kvconfig".text = ''
[General]
theme=KvArcDark
'';
};
dconf.settings = {
# The packages come in from modules/programs/gnome
@ -115,10 +97,7 @@ in {
# Extensions
"org/gnome/shell" = {
enabled-extensions = let
isMiku = config.ptw.system.hostName == "miku";
isNishimiya = config.ptw.system.hostName == "nishimiya";
in [
enabled-extensions = [
"caffeine@patapon.info"
"notification-timeout@chlumskyvaclav.gmail.com"
"gnome-ui-tune@itstime.tech"
@ -126,9 +105,7 @@ in {
"windowIsReady_Remover@nunofarruca@gmail.com"
"blur-my-shell@aunetx"
"gsconnect@andyholmes.github.io"
"trayIconsReloaded@selfmade.pl"
] ++ (lib.optional isMiku "tiling-assistant@leleat-on-github")
++ (lib.optional (isNishimiya || isMiku) "tilingnome@rliang.github.com");
];
};
"org/gnome/shell/extensions/caffeine" = {

View File

@ -1,14 +1,12 @@
{ config, lib, pkgs, ... }:
let
#mkAnime4kShader = shader: "${pkgs.anime4k}/usr/share/shaders/${shader}";
mkDefaultShader = shader: "${pkgs.mpv-shader-pack}/usr/share/shaders/${shader}";
makeMpvProfile = { shader ? null, gpuContext ? "waylandvk", additional ? {} }: {
glsl-shaders = lib.mkIf (shader != null) shader;
makeMpvProfile = { shader, additional ? {} }: {
glsl-shaders = "${pkgs.anime4k}/usr/share/shaders/${shader}";
scale = "ewa_lanczossharp";
cscale = "ewa_lanczossharp";
gpu-context = gpuContext;
gpu-api = "vulkan";
gpu-context = "wayland";
gpu-api = "opengl";
hwdec = "vaapi";
vo = "gpu";
video-sync = "display-resample";
@ -17,7 +15,8 @@ let
} // additional // (if config.ptw.programs.mpv != "" then {
# Make mpv pop up on the primary screen
screen-name = config.ptw.programs.mpv.primaryScreen;
fs-screen-name = config.ptw.programs.mpv.primaryScreen;} else {});
fs-screen-name = config.ptw.programs.mpv.primaryScreen;
} else {});
cfg = config.ptw.programs.mpv;
in {
options.ptw.programs.mpv = {
@ -41,19 +40,13 @@ in {
defaultProfiles = [ "anime" ];
profiles = {
anime = (makeMpvProfile {
#shader = mkAnime4kShader "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
shader = "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
additional = {
fullscreen = "";
};
});
anime-denoise = (makeMpvProfile {
#shader = mkAnime4kShader "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
});
non-anime = (makeMpvProfile {
shader = mkDefaultShader "FSRCNNX_x2_8-0-4-1.glsl";
});
non-anime-strong = (makeMpvProfile {
shader = mkDefaultShader "FSRCNNX_x2_16-0-4-1.glsl";
"anime-denoise" = (makeMpvProfile {
shader = "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
});
};
};

View File

@ -1,28 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.neovim;
in {
options.ptw.programs.neovim = {
enable = lib.mkEnableOption "Enable and configure neovim using HomeManager";
};
config = lib.mkIf cfg.enable {
home-manager.users."${config.ptw.system.singleUser}" = {
programs.neovim = {
enable = true;
extraPackages = with pkgs; [
# For telescope-nvim
fd
lazygit
fish
tree-sitter gcc
nodejs_20
# Clipboard
wl-clipboard
];
};
};
};
}

View File

@ -1,27 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.obs;
in {
options.ptw.programs.obs = {
enable = lib.mkEnableOption "Configure OBS Studio";
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.ptw.system.singleUser}.programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs obs-vkcapture
(obs-pipewire-audio-capture.overrideAttrs (old: {
source = pkgs.fetchFromGitHub {
owner = "dimtpap";
repo = "obs-pipewire-audio-capture";
rev = "dd0cfa9581481c862cddd725e23423cd975265d9";
sha256 = "1kwdlvpvvx6fgnbn3scx5yg8vgxqy0blrbdxnwqdizzwm2m412ls";
};
}))
];
};
};
}

View File

@ -1,15 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.office;
in {
options.ptw.programs.office.enable = lib.mkEnableOption "Install and configure office software";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
/*libreoffice*/
texlive.combined.scheme-basic
thunderbird
];
};
}

View File

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.plasma;
in {
options.ptw.programs.plasma = {
enable = lib.mkEnableOption "Enable KDE Plasma";
};
config = lib.mkIf cfg.enable {
services.xserver.desktopManager.plasma5 = {
enable = true;
runUsingSystemd = true;
supportDDC = true;
};
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-kde ];
};
environment.systemPackages = with pkgs; [
yakuake
libsForQt5.okular
libsForQt5.kdeconnect-kde
index-fm
kasts-git
];
};
}

View File

@ -1,26 +0,0 @@
{ pkgs, config, lib, ... }:
let
cfg = config.ptw.services.sddm;
in {
options.ptw.services.sddm = {
enable = lib.mkEnableOption "Enable SDDM as a display manager";
monitors = lib.mkOption {
description = "The file to use as a monitors.xml";
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.ptw.services.gdm.enable == false;
message = "Having two display managers is a bad idea";
}
];
services.xserver.displayManager.sddm = {
enable = true;
autoNumlock = true;
};
};
}

View File

@ -35,10 +35,6 @@ let
in {
options.ptw.programs.sway = {
enable = lib.mkEnableOption "Configure sway using HomeManager";
extraSessionCommands = lib.mkOption {
description = "Commands to be run before sway is started. See programs.sway.extraSessionCommands";
default = "";
};
};
config = lib.mkIf cfg.enable {
@ -52,7 +48,7 @@ in {
qt5.style = "adwaita-dark";
environment = {
systemPackages = with pkgs; [ adwaita-qt wdisplays ];
systemPackages = with pkgs; [ adwaita-qt ];
sessionVariables = {
# sway
#"_JAVA_AWT_NONREPARENTING" = 1;
@ -65,14 +61,10 @@ in {
};
};
programs.sway = {
enable = true;
extraSessionCommands = cfg.extraSessionCommands;
};
programs.sway.enable = true;
home-manager.users."${config.ptw.system.singleUser}" = {
wayland.windowManager.sway = {
enable = true;
extraSessionCommands = cfg.extraSessionCommands;
config = {
bars = [ ];
startup = [

View File

@ -14,16 +14,15 @@ in {
config = lib.mkIf cfg.enable {
home-manager.users."${config.ptw.system.singleUser}" = {
xdg.configFile."waybar/style.css".source = lib.mkForce ./style.css;
xdg.configFile."waybar/style.css".source = ./style.css;
programs.waybar = {
enable = true;
style = builtins.readFile ./style.css;
/*
settings = [
{
output = [ "${cfg.output}" ];
layer = "bottom";
position = "top";
position = "left";
gtk-layer-shell = true;
modules-left = [ "custom/applauncher" "sway/workspaces" "sway/mode" ];
@ -63,7 +62,6 @@ in {
};
}
];
*/
};
};
};

View File

@ -1,151 +1,133 @@
/*
Based on https://github.com/indicozy/wmtm/blob/main/configs/Flower/config/waybar/style.css
*/
@define-color background #323732;
@define-color foreground #deddda;
@define-color selection #44475a;
@define-color unfocused #6272a4;
@define-color cyan #5d7380;
@define-color green #fff6f6;
@define-color orange #d65d0e;
@define-color pink #ff5370;
@define-color purple #b16286;
@define-color red #bf6374;
@define-color yellow #d79921;
@define-color fore #d1c29d;
* {
border: none;
font-family: Iosevka Nerd Font, sans-serif;
font-size: 13px;
font-size: 14px;
font-family: "Hack";
padding: 0px;
margin: 0px;
/* text-shadow:1px 1px 2px rgba(0,0,0,.6); */
}
window#waybar {
/* background-color: rgba(18, 21, 29, 0.98); */
background-color: #12151d;
/* background-color: rgba(0, 0, 0, 0); */
border-bottom: 3px solid #1e222a;
color: #abb2bf;
transition-property: background-color;
transition-duration: .5s;
color: @foreground;
border-radius: 0;
}
window#waybar.hidden {
opacity: 0.2;
window#waybar.left {
background: rgba(43, 48, 59, .85);
border-top-left-radius: 0px;
border-top-right-radius: 0px;
border-top: none;
margin: 0;
}
window#waybar.bottom {
padding-top: 0px;
background: @green;
border-bottom-left-radius: 0px;
margin: 0;
}
.modules-left,
.modules-center,
.modules-right {
margin: 0;
padding: 0;
}
/* Base styling for modules */
#workspaces,
#mode,
#cpu,
#memory,
#temperature,
#custom-media,
#custom-fans,
#clock,
#window,
#idle_inhibitor,
#language,
#pulseaudio,
#backlight,
#battery,
#network,
#tray {
background-color: #1e222a;
padding: 0 10px;
margin: 2px 4px 5px 4px;
border: 3px solid rgba(0, 0, 0, 0);
border-radius: 90px;
background-clip: padding-box;
#taskbar,
#tray,
#custom-menu {
padding: 1px 0px 1px 0px;
margin: 0px;
}
#workspaces button {
padding: 0 5px;
min-width: 20px;
color: #61afef;
}
#workspaces button:hover {
background-color: rgba(0, 0, 0, 0.2)
}
#workspaces button.focused {
color: #c678dd;
}
#workspaces button.urgent {
color: #e06c75;
}
#cpu {
color: #61afef;
}
#memory {
color: #c678dd;
}
#temperature {
color: #d19a66;
}
#temperature.critical {
background-color: #e06c75;
color: #1e222a;
}
#custom-media {
background-color: #c678dd;
color: #1e222a;
}
#custom-fans {
color: #98c379;
}
#clock {
color: #61afef;
}
#idle_inhibitor {
color: #abb2bf;
}
#idle_inhibitor.activated {
background-color: #abb2bf;
color: #1e222a;
}
#language {
color: #56b6c2;
#pulseaudio, #idle_inhibitor {
font-size: 30px;
margin: 0px 2px;
}
#pulseaudio {
color: #d19a66;
font-size: 16px;
}
#pulseaudio.muted {
background-color: #e06c75;
color: #1e222a;
#taskbar,
#tray,
#window {
padding: 0;
margin: 0 0px 0 0px;
}
#taskbar {
margin-top: 0px;
}
#taskbar button {
color: @foreground;
border-radius: 0px;
padding: 3px 0px 3px 0px;
}
#taskbar button.active {
icon-shadow: 0px 0px 3px alpha(#111131, .9);
border-style: dashed;
border-width: 0 0 0 0;
border-color: @foreground;
border-radius: 0;
}
#backlight {
color: #61afef;
#tray {
color: black;
icon-shadow: 0px 1px 2px alpha(#020000, .9);
padding: 2px 0px 2px 0px;
}
#battery {
color: #98c379;
#custom-menu,
#custom-applauncher,
#custom-notifications {
font-size: 30px;
}
#battery.charging, #battery.plugged {
background-color: #98c379;
color: #1e222a;
#clock {
font-size: 16px;
margin-left: 2px;
margin-right: 2px;
}
@keyframes blink {
to {
background-color: #1e222a;
color: #e06c75;
}
#workspaces {
padding: 0px 0px 0px 0px;
margin-left: 0px;
}
#workspaces button {
margin: 0;
padding: 0px 0px 0px 0px;
border-radius: 0px;
color: @foreground;
}
#battery.critical:not(.charging) {
background-color: #e06c75;
color: #1e222a;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#network {
color: #c678dd
}
#network.disconnected {
background-color: #e06c75;
color: #1e222a;
#workspaces button.focused {
color: @foreground;
background-color: @purple;
border-style: solid;
border-width: 0 0 0 0;
border-color: @foreground;
border-radius: 0;
}

View File

@ -21,10 +21,7 @@ in {
home-manager.users."${config.ptw.system.singleUser}".programs.zsh = {
enable = true;
history.ignoreSpace = true;
shellAliases = let
home = "/home/${config.ptw.system.singleUser}/Development/Personal/nixos-config";
nixosSwitch = "nixos-rebuild --flake .#${config.ptw.system.hostName} switch --use-remote-sudo";
in {
shellAliases = {
ls = "ls --color=always";
".." = "cd ..";
"..." = "cd ../../";
@ -36,8 +33,6 @@ in {
gds = "git diff --staged";
c = "clear";
suspend = "systemctl suspend";
nixos-rebuild-switch = "pushd; cd ${home}; ${nixosSwitch}; popd";
nixos-rebuild-switch-fast = "pushd; cd ${home}; ${nixosSwitch} --fast; popd";
waifu2x = "flatpak run com.github.nihui.waifu2x-ncnn-vulkan";
};
@ -47,14 +42,8 @@ in {
bindkey "\e[3~" delete-char
'';
history.share = true;
initExtraFirst = let
enableDirenv = lib.optionalString
config.ptw.programs.direnv.enable
"eval \"$(${pkgs.direnv}/bin/direnv hook zsh)\"";
in ''
${enableDirenv}
# TODO: Maybe move this somewhere else
initExtraFirst = ''
wcurl() {
[[ -z "$1" ]] && echo "Error: No URL specified" && exit 1
@ -101,17 +90,15 @@ in {
sha256 = "1y8wkmhgkkyfz91y1f8crh6cg912n87gmcchc8xhnwji11n1mqrq";
};
}
/*
{
name = "zsh-syntax-highlighting";
src = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-syntax-highlighting";
rev = "c5ce0014677a0f69a10b676b6038ad127f40c6b1";
sha256 = "sha256-UqeK+xFcKMwdM62syL2xkV8jwkf/NWfubxOTtczWEwA=";
rev = "6e0e950154a4c6983d9e077ed052298ad9126144";
sha256 = "09bkg1a7qs6kvnq17jnw5cbcjhz9sk259mv0d5mklqaifd0hms4v";
};
}
*/
];
};
};

View File

@ -1,24 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.security.apparmor;
in {
options.ptw.security.apparmor = {
enable = lib.mkEnableOption "Enable AppArmor";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
apparmor-bin-utils
];
services.dbus.apparmor = "enabled";
security.apparmor = {
enable = true;
enableCache = true;
includes = {
profiles = "${pkgs.apparmor-profiles}/etc/apparmor.d";
};
};
};
}

View File

@ -1,27 +0,0 @@
{ lib, config, pkgs, ...}:
let
cfg = config.ptw.services.cups;
in {
options.ptw.services.cups = {
enable = lib.mkEnableOption "Enable Cups";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ gnome.simple-scan ];
services.printing = {
enable = true;
drivers = with pkgs; [ hplip ];
};
services.avahi = {
enable = lib.mkForce true;
nssmdns = true;
};
hardware.sane = {
enable = true;
extraBackends = with pkgs; [ sane-airscan hplip ];
};
};
}

View File

@ -1,4 +1,4 @@
{ config, lib, pkgs, ... }:
{ config, lib, ... }:
let
cfg = config.ptw.services.gamemode;
@ -7,15 +7,7 @@ in {
enable = lib.mkEnableOption "Enable and configure gamemode";
};
config = let
keyboardBrightnessScript = pkgs.writeShellScript "keyboard-brightness.sh" ''
${pkgs.rgb_keyboard}/bin/rgb_keyboard -l ripple -b "$1"
'';
in lib.mkIf cfg.enable {
security.sudo.extraConfig = ''
${config.ptw.system.singleUser} ALL = (ALL) NOPASSWD: ${keyboardBrightnessScript}
'';
config = lib.mkIf cfg.enable {
programs.gamemode = {
enable = true;
enableRenice = true;
@ -31,35 +23,6 @@ in {
ioprio = 0;
inhibit_screensaver = 1;
};
gpu = {
amd_performance_level = "high";
};
custom = let
switchScript = groupName: "${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.fcitx.Fcitx5 /controller org.fcitx.Fcitx.Controller1.SwitchInputMethodGroup string:'${groupName}'";
pauseFcitx = switchScript "Group 2";
resumeFcitx = switchScript "Group 1";
# The scripts
start = pkgs.writeShellScript "gamemode-start.sh" ''
# Disable Fcitx's IME
${pauseFcitx}
# Turn on the keyboard lights
${config.security.wrapperDir}/sudo ${keyboardBrightnessScript} 1
'';
end = pkgs.writeShellScript "gamemode-end.sh" ''
# Resume Fcitx's IME
${resumeFcitx}
# Turn off the keyboard lights
${config.security.wrapperDir}/sudo ${keyboardBrightnessScript} 0
'';
in {
start = "${start}";
end = "${end}";
};
};
};
};

View File

@ -1,53 +0,0 @@
{ lib, config, pkgs, ... }:
let
cfg = config.ptw.services.greetd;
in {
options.ptw.services.greetd = {
enable = lib.mkEnableOption "Enable greetd with gtkgreet";
swayExtra = lib.mkOption {
description = "Extra options to include in the sway config";
default = "";
};
};
config = lib.mkIf cfg.enable {
users.users.greeter = {
isSystemUser = lib.mkForce false;
isNormalUser = true;
createHome = true;
uid = 992;
};
services = {
greetd = {
enable = true;
restart = true;
settings = {
default_session = let
swayConfig = pkgs.writeText "login-sway-config" ''
exec ${pkgs.greetd.gtkgreet}/bin/gtkgreet -l; ${pkgs.sway}/bin/swaymsg exit;
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
input "*" {
xkb_layout de
}
${cfg.swayExtra}
include /etc/sway/config.d/*
'';
in {
command = "${pkgs.sway}/bin/sway --config ${swayConfig}";
user = "greeter";
};
};
};
};
};
}

View File

@ -10,8 +10,8 @@ in {
config = lib.mkIf cfg.enable {
# TODO: mozc cannot be configured for some reason
i18n.inputMethod = {
enabled = "fcitx5";
fcitx5.addons = with pkgs; [ fcitx5-mozc ];
enabled = "fcitx";
fcitx.engines = with pkgs.fcitx-engines; [ mozc ];
};
environment.systemPackages = with pkgs; [ fcitx5-configtool fcitx5-gtk ];

View File

@ -1,29 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.services.input-remapper;
in {
options.ptw.services.input-remapper = {
enable = lib.mkEnableOption "Enable the input-remapper service and install it";
postStartCommand = lib.mkOption {
default = "";
description = "Command to be executed after the input-remapper service has been started";
# type = ;
};
};
config = lib.mkIf cfg.enable {
# TODO: Assert that uinput is in kernelModules
#services.udev = {
# packages = with pkgs; [ input-remapper ];
# extraRules = ''
# KERNEL=="uinput", GROUP="input", MODE="0660"
# '';
#};
services.input-remapper = {
enable = true;
enableUdevRules = true;
serviceWantedBy = [ "default.target" ];
};
};
}

View File

@ -0,0 +1,35 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.services.key-mapper;
in {
options.ptw.services.key-mapper = {
enable = lib.mkEnableOption "Enable the key-mapper service and install it";
};
config = lib.mkIf cfg.enable {
# TODO: Assert that uinput is in kernelModules
services.udev = {
packages = with pkgs; [ key-mapper ];
extraRules = ''
KERNEL=="uinput", GROUP="input", MODE="0660"
'';
};
environment.systemPackages = [
pkgs.key-mapper # Custom package
];
systemd.user.services.key-mapper = {
description = "A tool to change the mapping of your input device buttons";
wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.key-mapper}/bin/key-mapper-service";
Restart = "always";
# NOTE: The Tartarus may not be connected, so don't fail if we cannot set the preset
ExecPostStart = "${pkgs.key-mapper}/bin/key-mapper --command start --preset NOOP --device \"Razer Razer Tartarus V2\"; exit 0";
};
};
};
}

View File

@ -1,48 +0,0 @@
{ lib, pkgs, config, ... }:
let
cfg = config.ptw.services.logiops;
in {
options.ptw.services.logiops = {
enable = lib.mkEnableOption "Enable logiops";
renice = lib.mkOption {
description = "Set the nice value of the process";
default = true;
};
reniceValue = lib.mkOption {
description = "Set the nice value of the process";
default = -19;
};
};
config = lib.mkIf true {
systemd.services.logiops = {
description = "An unofficial userspace driver for HID++ Logitech devices";
wantedBy = [ "default.target" ];
serviceConfig = let
logiopsConfig = pkgs.writeText "logiops.cfg" ''
devices: (
{
name: "Wireless Mouse MX Master 3";
hiresscroll: {
hires: true;
target: false;
};
smartshift: {
on: true;
threshold: 30;
default_threshold: 30;
};
dpi: 800;
}
);
'';
in {
Type = "simple";
ExecStart = let
renice = lib.optionalString cfg.renice "${pkgs.coreutils-full}/bin/nice -n ${builtins.toString cfg.reniceValue}";
in "${renice} ${pkgs.logiops}/bin/logid -c ${logiopsConfig}";
};
};
};
}

View File

@ -1,31 +0,0 @@
{ lib, config, pkgs, ...}:
let
cfg = config.ptw.services.yubikey;
in {
options.ptw.services.yubikey = {
enable = lib.mkEnableOption "Enable everything for using a YubiKey";
};
config = lib.mkIf cfg.enable {
services = {
# Unprivileged access to the YubiKey
udev.packages = [ pkgs.yubikey-personalization ];
# Allow using the YubiKey as a smart card
pcscd.enable = true;
};
environment.systemPackages = with pkgs; [
# Management
yubikey-manager-qt yubikey-manager yubico-piv-tool
];
programs = {
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
};
};
}

View File

@ -4,14 +4,13 @@
config = lib.mkIf (config.ptw.system.singleUser == "alexander") {
users.users.alexander = {
isNormalUser = true;
extraGroups = [ "wheel" "audio" "video" "kvm" "input" "libvirtd" "scanner" "lp" "alexander" "cdrom" ];
hashedPassword = "$y$j9T$xhnK648hF0yzDnRy0rTT/.$HbDKvNetiGeY3Xjt6/YPIzoxSmdQ0SzhXengOT1Ga01";
extraGroups = [ "wheel" "audio" "video" "kvm" "input" "libvirtd" ];
hashedPassword = "$5$i4aZuQ/WXP.rFOc$lCzDqbrVsqBQt5954O.3bFPknD0jn27MmqzmE4DIAEC";
shell = pkgs.zsh;
useDefaultShell = false;
uid = 1000;
isSystemUser = false;
};
users.groups.alexander = {};
# Activate gpg
programs.gnupg.agent.enable = true;
@ -19,39 +18,35 @@
# No need to use users."${system.singleUser}" as we already know it
home-manager.users.alexander = {
programs.home-manager.enable = true;
home.stateVersion = "22.11";
programs.ssh = {
enable = true;
extraConfig = ''
IdentitiesOnly yes
'';
includes = [
"config.d/*"
];
matchBlocks = let
sshPort = 1847;
sshPort = (import ../../lib/ports.nix).sshPort;
in {
ayame = {
port = sshPort;
hostname = "78.46.184.48";
user = "alexander";
identityFile = "~/.ssh/polynom.me_ayame";
identitiesOnly = true;
};
"git.polynom.me" = {
port = 2222;
user = "gitea";
hostname = "git.polynom.me";
identityFile = "~/.ssh/gitea_papatutuwawa";
identityFile = "~/.ssh/gitea_papatutuwawa_ed";
};
"github.com" = {
user = "git";
hostname = "github.com";
identityFile = "~/.ssh/github_polynomdivision";
};
"codeberg.org" = {
user = "git";
hostname = "codeberg.org";
identityFile = "~/.ssh/codeberg_papatutuwawa";
};
"collaborating.tuhh.de" = {
user = "git";
hostname = "collaborating.tuhh.de";
identityFile = "~/.ssh/gitlab_tuhh";
"minecraft" = {
port = sshPort;
user = "alexander";
hostname = "49.12.33.24";
identityFile = "~/.ssh/polynom.me";
};
};
};

View File

@ -8,7 +8,7 @@ in {
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ virglrenderer unstable.qemu virt-manager ];
environment.systemPackages = with pkgs; [ virglrenderer unstable.qemu ];
services.spice-vdagentd.enable = true;
virtualisation.libvirtd = {
@ -23,9 +23,11 @@ in {
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet",
"/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse",
"/dev/input/by-id/usb-Razer_Razer_Tartarus_V2-event-kbd",
"/dev/input/by-id/virtual-event-EvdevProxyMouse",
"/dev/input/by-id/virtual-event-EvdevProxyKeyboard",
"/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse"
"/dev/input/by-id/virtual-event-EvdevProxyTartarus",
"/dev/input/by-id/usb-Razer_Razer_BlackWidow_Ultimate-event-kbd"
]
'';
};

View File

@ -24,7 +24,7 @@ in {
USBIDClass = {vendor=0x046d, model=0xc07c, class="Mouse"}
[[device]]
[device.Simple]
name = "EvdevProxyKeyboard"
name = "EvdevProxyTartarus"
vendor = 0x1337
model = 0x1338
class = "Keyboard"
@ -32,67 +32,67 @@ in {
# the mapped version of the Tartarus evdev node.
# (Useful for qemu)
[[device.Simple.selector]]
EVDEVClass = {phys="\"input-remapper\""}
[[device.Simple.selector]]
USBIDClass = {vendor=0x1532, model=0x011a, class="Keyboard"}
EVDEVClass = {phys="\"key-mapper\""}
'';
# "libvirt/hooks/qemu".source = let
# vfio-isolate-state = "/tmp/vfio-isolate-state";
# in pkgs.writeScript "qemu" ''
# #!${pkgs.stdenv.shell}
# guest=$1
# action=$2
# phase=$3
# extra=$4
"libvirt/hooks/qemu".source = let
vfio-isolate-state = "/tmp/vfio-isolate-state";
in pkgs.writeScript "qemu" ''
#!${pkgs.stdenv.shell}
guest=$1
action=$2
phase=$3
extra=$4
# echo "called with $1 $2 $3 $4" > /dev/stderr
# if [[ "$guest" = "win10-gaming" ]]; then
# case "$action" in
# prepare)
# # Only do this while in preparation
# [[ ! "$phase" = "prepare" ]] && exit 0
if [[ "$guest" = "win10" ]]; then
case "$action" in
prepare)
# Only do this while in preparation
[[ ! "$phase" = "prepare" ]] && exit 0
# GUEST_CORES="C1-3,5-7"
# ${pkgs.vfio-isolate}/bin/vfio-isolate \
# -u ${vfio-isolate-state} \
# cpu-governor performance "$GUEST_CORES" \
# cpuset-create --cpus "$GUEST_CORES" /guest.slice \
# cpuset-create --cpus C0,4 /host.slice \
# move-tasks / /host.slice \
# irq-affinity mask "$GUEST_CORES"
# ;;
# stopped)
# # Only run when the VM is fully stopped
# [[ ! "$phase" = "end" ]] && exit 0
# ${pkgs.vfio-isolate}/bin/vfio-isolate \
# restore ${vfio-isolate-state}
# esac
# fi
# '';
sudo -u alexander systemctl --user start evdev-proxy.service
sudo -u alexander systemctl --user start scream.service
sleep 2
${pkgs.vfio-isolate}/bin/vfio-isolate \
-u ${vfio-isolate-state} \
cpu-governor performance "$GUEST_CORES" \
cpuset-create --cpus "$GUEST_CORES" /guest.slice \
cpuset-create --cpus C0,4 /host.slice \
move-tasks / /host.slice \
irq-affinity mask "$GUEST_CORES"
;;
stopped)
# Only run when the VM is fully stopped
[[ ! "$phase" = "end" ]] && exit 0
sudo -u alexander systemctl --user stop evdev-proxy.service
sudo -u alexander systemctl --user stop scream.service
${pkgs.vfio-isolate}/bin/vfio-isolate \
restore ${vfio-isolate-state}
esac
fi
'';
};
# NOTE: Workaround for libvirt's SYSCONFDIR being set to /var/lib
# (See https://github.com/NixOS/nixpkgs/issues/51152#issuecomment-899374407)
system.activationScripts.libvirt-hooks.text = ''
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
'';
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
'';
services.udev.packages = with pkgs; [ evdev-proxy ];
#services.udev.packages = with pkgs; [ evdev-proxy ];
systemd = {
services = {
libvirtd.path = with pkgs; [ /*vfio-isolate*/ systemd bash ];
};
user.services.evdev-proxy = {
description = "Creates virtual device to proxy evdev devices events";
wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.evdev-proxy}/bin/evdev-proxy";
Restart = "always";
};
};
services.libvirtd.path = with pkgs; [ vfio-isolate systemd bash ];
#user.services.evdev-proxy = {
# description = "Creates virtual device to proxy evdev devices events";
# #wantedBy = [ "default.target" ];
# serviceConfig = {
# Type = "simple";
# ExecStart = "${pkgs.evdev-proxy}/bin/evdev-proxy";
# Restart = "always";
# };
#};
};
};
}

View File

@ -1,29 +0,0 @@
final: prev:
let
overrideWithAACS = pkgName: prev."${pkgName}".overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
in {
libbluray = prev.libbluray.override {
withAACS = true;
withBDplus = true;
};
mpvUnwrapped = prev.mpvUnwrapped.overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
vlc = prev.vlc.overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
handbrake = prev.handbrake.overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
/*
mpvUnwrapped = overrideWithAACS "mpvUnwrapped";
handbrake = overrideWithAACS "handbrake";
*/
}

View File

@ -1,7 +1,6 @@
{ pkgs, inputs }:
{ pkgs }:
{
simple = import ./simple.nix;
#surface = import ./surface.nix pkgs;
sandbox = import ./sandbox.nix;
surface = import ./surface.nix pkgs;
}

View File

@ -1,46 +0,0 @@
final: prev:
rec {
phoc = prev.phoc.overrideAttrs (old: rec {
version = "0.20.0";
src = prev.fetchFromGitLab {
domain = "gitlab.gnome.org";
group = "World";
owner = "Phosh";
repo = "phoc";
rev = "v${version}";
sha256 = "1mm47n5x7kjgrpxbvb0d0yvpxgzyg90mmmafb6fxhsqklf2dhryy";
};
buildInputs = (map
(x: if (prev.lib.getName x) == "wlroots"
then prev.wlroots_0_15
else x
) old.buildInputs);
});
phosh = prev.phosh.overrideAttrs (old: rec {
version = "0.20.0_beta2";
src = prev.fetchFromGitLab {
domain = "gitlab.gnome.org";
group = "World";
owner = "Phosh";
repo = "phosh";
rev = "v${version}";
fetchSubmodules = true; # including gvc and libcall-ui which are designated as subprojects
sha256 = "sha256-UzOv6ztxYYE4CIzCYKSRfpZzE7oSEKenVX+umkEmFRw=";
};
buildInputs = (map
(x: if (prev.lib.getName x) == "phoc"
then phoc
else x
) old.buildInputs);
postFixup = ''
mkdir -p $out/share/wayland-sessions
ln -s $out/share/applications/sm.puri.Phosh.desktop $out/share/wayland-sessions/
'';
});
}

View File

@ -1,140 +0,0 @@
final: prev:
let
wrapInSandbox = prev.callPackage ../lib/sandbox.nix {};
in {
discord-app-wrapped = wrapInSandbox {
name = "discord-app-wrapped";
launchScriptName = "discord-app";
binary = "${prev.discord-app}/bin/discord-app";
mountInHome = [ ".local/share/discord-app" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
mkdir -p $out/share/icons
cp -L ${prev.discord}/share/pixmaps/discord.png $out/share/icons/discord.png
'';
desktopFileAttributes = {
name = "discord-app-wrapped";
#exec = "discord";
icon = "discord";
desktopName = "Discord-App (wrapped)";
genericName = "Instant Messenger";
#categories = [ "Network" "InstantMessaging" ];
};
enableDesktopFile = true;
};
prismlauncher-wrapped = wrapInSandbox {
name = "prismlauncher";
binary = let
script = prev.writeShellScript "prismlauncher-zink.sh" ''
export MESA_LOADER_DRIVER_OVERRIDE=zink
${prev.prismlauncher}/bin/prismlauncher
'';
in "${prev.prismlauncher}/bin/prismlauncher";
launchScriptName = "prismlauncher-wrapped";
mountInHome = [".local/share/PrismLauncher"];
additionalMounts = [
"/etc/profile"
];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
};
steam-wrapped = wrapInSandbox {
name = "steam-wrapped";
binary = "${prev.steam}/bin/steam";
launchScriptName = "steam";
mountInHome = [
".steam"
".local/share/Steam"
"Downloads/Skyrim Mods"
];
additionalBlacklist = [ "/mnt" ];
additionalMounts = [ "/mnt/Storage/Games/SteamLibrary" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
cp -Lr ${prev.steam}/share/icons $out/share/icons
'';
desktopFileAttributes = {
name = "steam-wrapped";
icon = "steam";
desktopName = "Steam (wrapped)";
};
enableDesktopFile = true;
};
spotify-wrapped = wrapInSandbox {
name = "spotify-wrapped";
launchScriptName = "spotify";
binary = "${prev.spotify}/bin/spotify";
additionalBlacklist = [ "/mnt" ];
mountInHome = [ ".config/spotify" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
cp -Lr ${prev.spotify}/share/icons $out/share/icons
'';
desktopFileAttributes = {
name = "spotify-wrapped";
icon = "spotify-client";
desktopName = "Spotify (wrapped)";
};
enableDesktopFile = true;
};
lutris-free-wrapped = wrapInSandbox {
name = "lutris-free-wrapped";
launchScriptName = "lutris";
binary = "${prev.lutris-free}/bin/lutris";
additionalBlacklist = [ "/mnt" ];
additionalMounts = [
"/mnt/Storage/Games/LeagueOfLegends"
"/mnt/Storage/Games/Origin"
"/mnt/Storage/Games/SteamLibrary"
"/mnt/Storage/Games/Uplay"
"/mnt/tmp"
];
mountInHome = [ ".local/share/lutris" ".config/lutris" "Games" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
mkdir -p $out/share/
cp -Lr ${prev.lutris-free}/share/icons $out/share/icons/
'';
desktopFileAttributes = {
name = "lutris-wrapped";
icon = "lutris";
desktopName = "Lutris (wrapped)";
};
enableDesktopFile = true;
};
discord-wrapped = let
discordPkg = prev.discord;
in wrapInSandbox {
name = "discord-wrapped";
launchScriptName = "discord";
binary = "${discordPkg}/bin/discord";
mountInHome = [ ".config/discord" ".config/BetterDiscord" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
mkdir -p $out/share/icons
cp -L ${discordPkg}/share/pixmaps/discord.png $out/share/icons/discord.png
'';
desktopFileAttributes = {
name = "discord-wrapped";
#exec = "discord";
icon = "discord";
desktopName = "Discord (wrapped)";
genericName = "Instant Messenger";
#categories = [ "Network" "InstantMessaging" ];
};
enableDesktopFile = true;
};
}

View File

@ -1,12 +1,34 @@
final: prev: {
final: prev:
let
# NOTE: For some reason --fs-screen-name and --screen-name are not in
# 0.33.1. So wait and then remove this.
mpv-git = prev.mpv-unwrapped.overrideAttrs (old: {
version = "0.34.0";
src = builtins.fetchGit {
url = "https://github.com/mpv-player/mpv.git";
ref = "master";
rev = "0b56e1c00a57fdb767674462c299a5c973a9e373";
};
patches = [];
});
in {
mpv = prev.wrapMpv mpv-git {
# Prevent the need for prefixing mpv with DRI_PRIME=1
extraMakeWrapperArgs = [
"--set" "DRI_PRIME" "1"
];
};
gajim = prev.gajim.overrideAttrs (old: {
# Enable notification sounds
propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.gsound ];
});
animedl = prev.animedl.overrideAttrs (old: {
extraPkgs = pkgs: with final; [ mpv ];
});
lutris-free = prev.lutris-free.override {
extraPkgs = ps: with ps; [ openssl ];
};
retroarch = prev.retroarch.override (old: {
cores = with prev.libretro; [
desmume
@ -37,43 +59,4 @@ final: prev: {
myxer = prev.myxer.overrideAttrs (old: {
cargoPatches = [ ../patches/myxer/0000-1.2.1-set-gio-version.patch ];
});
xournalpp-git = prev.xournalpp.overrideAttrs (old: {
version = "1.1.1";
src = prev.fetchFromGitHub {
owner = "bhennion";
repo = "xournalpp";
rev = "5d1545b0c4303e45b4ddf4ef8a1565eba822a9af";
sha256 = "1d17lvydlny9pvaxa9xy53wxs7i6d563lp5r9g3r1xpgnb7zli8v";
};
});
discord = prev.discord.overrideAttrs (old: rec {
version = "0.0.18";
src = prev.fetchurl {
url = "https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
sha256 = "sha256-BBc4n6Q3xuBE13JS3gz/6EcwdOWW57NLp2saOlwOgMI=";
};
});
tor-browser-bundle-bin = prev.tor-browser-bundle-bin.override {
useHardenedMalloc = false;
};
discord-app = prev.discord-app.override { chromium = prev.ungoogled-chromium; };
# Work around https://github.com/NixOS/nixpkgs/issues/216294
# pkgsi686Linux = prev.pkgsi686Linux.extend (pfinal: pprev: {
# directx-shader-compiler = pprev.directx-shader-compiler.override {stdenv = pfinal.gcc11Stdenv;};
# });
gajim = prev.gajim.overrideAttrs (old: {
propagatedBuildInputs = old.propagatedBuildInputs ++ [
# Make the tray icon work
prev.libappindicator-gtk3
# Play sounds
prev.gsound
];
});
}

View File

@ -0,0 +1,91 @@
{ fetchFromGitLab
, lib
, python3Packages
, gobject-introspection
, gtk3
, pango
, wrapGAppsHook
, xvfb-run
, chromecastSupport ? false
, serverSupport ? false
, keyringSupport ? true
, notifySupport ? true, libnotify
, networkSupport ? true, networkmanager
}:
python3Packages.buildPythonApplication rec {
pname = "sublime-music";
version = "0.11.16";
format = "pyproject";
src = fetchFromGitLab {
owner = "sublime-music";
repo = pname;
rev = "v${version}";
sha256 = "0n06x7l4i9nqbc74yhrjgg10zffdb75jz43mbxd03hr5057fdglz";
};
nativeBuildInputs = [
gobject-introspection
python3Packages.poetry-core
wrapGAppsHook
];
buildInputs = [
gtk3
pango
]
++ lib.optional notifySupport libnotify
++ lib.optional networkSupport networkmanager
;
propagatedBuildInputs = with python3Packages; [
bleach
dataclasses-json
deepdiff
fuzzywuzzy
mpv
peewee
pygobject3
python-Levenshtein
python-dateutil
requests
semver
]
++ lib.optional chromecastSupport PyChromecast
++ lib.optional keyringSupport keyring
++ lib.optional serverSupport bottle
;
# hook for gobject-introspection doesn't like strictDeps
# https://github.com/NixOS/nixpkgs/issues/56943
strictDeps = false;
# Use the test suite provided by the upstream project.
doCheck = false;
checkInputs = with python3Packages; [
pytest
pytest-cov
];
checkPhase = "${xvfb-run}/bin/xvfb-run pytest";
# Also run the python import check for sanity
#pythonImportsCheck = [ "sublime_music" ];
postInstall = ''
install -Dm444 sublime-music.desktop -t $out/share/applications
install -Dm444 sublime-music.metainfo.xml -t $out/share/metainfo
for size in 16 22 32 48 64 72 96 128 192 512 1024; do
install -Dm444 logo/rendered/"$size".png \
$out/share/icons/hicolor/"$size"x"$size"/apps/sublime-music.png
done
'';
meta = with lib; {
description = "GTK3 Subsonic/Airsonic client";
homepage = "https://sublimemusic.app/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ albakham sumnerevans ];
};
}

View File

@ -1,31 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
, wlroots_0_16, wayland, pixman
, dfl-applications, dfl-utils, dfl-ipc, wayqt
}:
stdenv.mkDerivation {
pname = "qtgreet";
version = "20230117";
src = fetchFromGitLab {
owner = "marcusbritanicus";
repo = "QtGreet";
rev = "666603c38bbc408fd56126f3c8508009edf8dc44";
sha256 = "0gigmlg4a0ddzhfnkhbrh67m23g6vhzayfv4gbvqjmkky91qnz93";
};
mesonFlags = [
"-Dnodynpath=true"
];
buildInputs = [
qtbase meson ninja pkg-config
wlroots_0_16 wayland pixman
wayqt dfl-applications dfl-ipc dfl-utils
];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -1,30 +0,0 @@
{
stdenv
, fetchFromGitHub
, gcc, gnumake
, libusb
}:
stdenv.mkDerivation rec {
pname = "rgb_keyboard";
version = "20230430";
src = fetchFromGitHub {
owner = "PapaTutuWawa";
repo = "rgb_keyboard";
rev = "5bbdafea77ef3c3eb47081494f3b58abcd5c4e27";
sha256 = "0m5hvlhqncy1qn5v6gpsz9qd2p4cvcjjnma08vb4b2ybq4kfv7qw";
};
buildInputs = [
libusb
];
buildPhase = ''
${gnumake}/bin/make build
'';
installPhase = ''
mkdir -p $out/bin/
cp rgb_keyboard $out/bin/
'';
}

View File

@ -1,24 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, cmake, extra-cmake-modules, pkg-config
, qtbase, qtx11extras, wrapQtAppsHook
, kpipewire, plasma-framework
, xorg
}:
stdenv.mkDerivation rec {
pname = "xwaylandvideobridge";
version = "5.27.3";
src = fetchFromGitLab {
owner = "davidedmundson";
repo = "xwaylandvideobridge";
rev = "b9e0c53570f55f4e8289f72ba78f3945e27e1a1a";
domain = "invent.kde.org";
sha256 = "1ypg2c26r5fy9lr8shif5vqcp06yf7mqqj2ps5g00s7s3ykryxdn";
};
buildInputs = [ qtbase qtx11extras plasma-framework xorg.xcbproto kpipewire cmake pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook extra-cmake-modules ];
}

View File

@ -1,46 +0,0 @@
{
stdenv
, makeDesktopItem, writeScript, fetchurl
, chromium
}:
let
script = writeScript "run-discord-app.sh" ''
${chromium}/bin/chromium \
--class="Discord-App" \
--app="https://discord.com/channels/@me" \
--user-data-dir=$HOME/.local/share/discord-app
'';
desktopItem = makeDesktopItem {
name = "discord-app";
desktopName = "Discord App";
genericName = "All-in-one cross-platform voice and text chat for gamers";
exec = "${script}";
icon = "discord";
type = "Application";
categories = [ "Network" "InstantMessaging" ];
startupWMClass = "Discord-App";
};
iconSvg = fetchurl {
url = "https://discord.com/assets/3437c10597c1526c3dbd98c737c2bcae.svg";
sha256 = "0w18j5pvqnaimnsx9flqm8n5yb7lnkc5jsvf1c9sk5a3jplq2j61";
};
in stdenv.mkDerivation {
pname = "discord-app";
version = "1.0.0";
buildInputs = [ chromium ];
phases = "installPhase";
installPhase = ''
# Install the icon
mkdir -p $out/share/pixmaps
cp ${iconSvg} $out/share/pixmaps/discord.svg
mkdir -p $out/bin
cp ${script} $out/bin/discord-app
cp -r ${desktopItem}/share/* $out/share
'';
}

View File

@ -1,17 +1,16 @@
{
lib, stdenv, pkgs
, extraStartupArgs ? ""
, upstreamElectron ? pkgs.electron
}:
pkgs.discord.overrideAttrs (old: let
pkgs.unstable.discord.overrideAttrs (old: let
asar = pkgs.nodePackages.asar;
gtk3 = pkgs.gtk3;
binaryName = "Discord";
system-electron = "$out/opt/${binaryName}/system-electron.sh";
in rec {
version = "0.0.17";
nativeBuildInputs = with pkgs.unstable; old.nativeBuildInputs ++ [ upstreamElectron asar ];
version = "0.0.16";
nativeBuildInputs = with pkgs.unstable; old.nativeBuildInputs ++ [ electron asar ];
buildPhase = ''
${asar}/bin/asar e resources/app.asar resources/app
rm resources/app.asar

View File

@ -0,0 +1,82 @@
{ lib, fetchurl, gettext, wrapGAppsHook
# Native dependencies
, python3, gtk3, gobject-introspection, gnome
, glib-networking, gsound, nbxmpp, gtksourceview4
# Test dependencies
, xvfb-run, dbus
# Optional dependencies
, enableE2E ? true
, enableSecrets ? true, libsecret
, enableRST ? true, docutils
, enableSpelling ? true, gspell
, enableUPnP ? true, gupnp-igd
, enableOmemoPluginDependencies ? true
, enableAppIndicator ? true, libappindicator-gtk3
, extraPythonPackages ? ps: []
}:
let
commit = "2804e759eee439eb5d660368358b685a3c0b4110";
in python3.pkgs.buildPythonApplication rec {
pname = "gajim";
version = "1.4.0";
src = fetchurl {
url = "https://dev.gajim.org/gajim/gajim/-/archive/${commit}/gajim-${commit}.tar.gz";
sha256 = "sha256-G5nvLlkEU89uAQZuYlZrPa0ycR7kx67sOLmUgORhNJw=";
};
buildInputs = [
gobject-introspection gtk3 gnome.adwaita-icon-theme
glib-networking
] ++ lib.optional enableSecrets libsecret
++ lib.optional enableSpelling gspell
++ lib.optional enableUPnP gupnp-igd
++ lib.optional enableAppIndicator libappindicator-gtk3;
nativeBuildInputs = [
gettext wrapGAppsHook
];
dontWrapGApps = true;
preFixup = ''
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
'';
propagatedBuildInputs = with python3.pkgs; [
nbxmpp pygobject3 dbus-python pillow css-parser precis-i18n keyring setuptools gsound
gst-python gtksourceview4
] ++ lib.optionals enableE2E [ pycrypto python-gnupg ]
++ lib.optional enableRST docutils
++ lib.optionals enableOmemoPluginDependencies [ python-axolotl qrcode ]
++ extraPythonPackages python3.pkgs;
checkInputs = [ xvfb-run dbus.daemon ];
checkPhase = ''
# https://dev.gajim.org/gajim/gajim/-/issues/10478
rm test/lib/gajim_mocks.py test/unit/test_gui_interface.py
xvfb-run dbus-run-session \
--config-file=${dbus.daemon}/share/dbus-1/session.conf \
${python3.interpreter} setup.py test
'';
doCheck = false;
# necessary for wrapGAppsHook
strictDeps = false;
meta = {
homepage = "http://gajim.org/";
description = "Jabber client written in PyGTK";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ raskin abbradar ];
downloadPage = "http://gajim.org/downloads.php";
updateWalker = true;
platforms = lib.platforms.linux;
};
}

View File

@ -1,27 +0,0 @@
{
lib, stdenv
, fetchFromGitHub
, wayfire, wf-config, librsvg, boost, wlroots, pango, wayland, libxkbcommon, systemd, libinput
, meson, pkg-config, cmake, ninja
}:
stdenv.mkDerivation {
pname = "firedecor";
version = "20220519";
src = fetchFromGitHub {
owner = "AhoyISki";
repo = "Firedecor";
rev = "0170c4df209f0226295a9e2aa3cae782d9861908";
sha256 = "0a8vc4l3az14l8piwzqgfqsdv16kakcvcznvw6q1dgb2sf97zdlv";
};
nativeBuildInputs = [ meson pkg-config cmake ninja ];
buildInputs = [ wayfire librsvg boost wf-config wlroots pango wayland libxkbcommon systemd libinput ];
patchPhase = ''
sed -e "s|wayfire.get_variable(pkgconfig: 'plugindir')|'$out/usr/lib/wayfire'|" --in-place src/meson.build
sed -e "s|wayfire.get_variable(pkgconfig: 'metadatadir')|'$out/usr/lib/wayfire'|" --in-place metadata/meson.build
'';
}

View File

@ -6,59 +6,19 @@ let
discord-system-electron = prev.callPackage ./applications/networking/instant-messengers/discord {
# Wayland
# NOTE: electron under Wayland has no window titlebars
upstreamElectron = prev.electron_16;
extraStartupArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland";
#extraStartupArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-features=WebRTCPipeWireCapturer";
};
wf-config_0_8 = prev.wf-config.overrideAttrs (old: {
version = "0.8-git";
src = prev.fetchFromGitHub {
owner = "wayfirewm";
repo = "wf-config";
rev = "e42a3870fb194842a505ad5a9671be1aebda0b0b";
sha256 = "0n6i3hizbqixxjh33950ya8avwqil5k94jbgff1pimcbh9ahpgrr";
};
});
wayfire-master = (prev.wayfireApplications-unwrapped.wayfire.overrideAttrs (old: {
version = "0.8.0-20220526";
src = prev.fetchgit {
url = "https://github.com/WayfireWM/wayfire.git";
rev = "5dbf0d0fd8ec46cf112f05fb63057f5b6d06b10d";
sha256 = "sha256-ZeaNSlDHoiLnRlHKk14meDbrizIz+nm3iYl90vvo2Ps=";
fetchSubmodules = true;
};
buildInputs = (map
# Override wlroots with wlroots_0_15
(x: if (prev.lib.getName x) == "wlroots"
then prev.wlroots_0_15
else x
) old.buildInputs) ++ [ prev.pango prev.libevdev prev.nlohmann_json ];
})).override {
wf-config = wf-config_0_8;
};
dfl-ipc = prev.libsForQt5.callPackage development/cpp/dfl-ipc {};
wayqt = prev.libsForQt5.callPackage development/cpp/wayqt {};
dfl-utils = prev.libsForQt5.callPackage development/cpp/dfl-utils {};
dfl-applications = prev.libsForQt5.callPackage development/cpp/dfl-app {
inherit dfl-ipc;
};
kpipewire = prev.libsForQt5.kpipewire.overrideAttrs (old: {
src = prev.fetchFromGitLab {
owner = "plasma";
repo = "kpipewire";
rev = "ed99b94be40bd8c5b7b2a2f17d0622f11b2ab7fb";
domain = "invent.kde.org";
sha256 = "sha256-KhmhlH7gaFGrvPaB3voQ57CKutnw5DlLOz7gy/3Mzms=";
};
});
wrapInSandbox = prev.callPackage ./sandbox.nix {};
in {
inherit discord-system-electron dfl-ipc dfl-applications dfl-utils wayqt;
key-mapper = prev.callPackage ./tools/games/key-mapper {};
vfio-isolate = prev.callPackage ./tools/virtualisation/vfio-isolate {};
mopidy-funkwhale = prev.callPackage ./applications/audio/mopidy/funkwhale.nix {};
# Not as clean as I hoped, but it works
gnomeExtensions = prev.gnomeExtensions // {
notification-timeout = prev.callPackage ./desktop/gnome/extensions/notification-timeout {};
windowisready-remover = prev.callPackage ./desktop/gnome/extensions/windowisready-remover {};
};
python3Packages = prev.python3Packages // {
pySmartDL = pySmartDL;
cfscrape = cfscrape;
@ -66,59 +26,109 @@ in {
replaysorcery = prev.callPackage ./tools/games/replaysorcery {};
evdev-proxy = prev.callPackage ./tools/virtualisation/evdev-proxy {};
virtiofsd = prev.callPackage ./tools/virtualisation/virtiofsd {};
anime4k = prev.callPackage ./misc/video/anime4k {};
mpv-shader-pack = prev.callPackage ./misc/video/mpv-shader-pack {};
anime-dl = prev.callPackage ./tools/video/animedl {
pySmartDL = pySmartDL;
cfscrape = cfscrape;
};
animdl = prev.callPackage ./misc/video/animdl {};
discord-wrapped = wrapInSandbox {
name = "discord";
package = prev.discord;
#package = discord-system-electron;
binaryName = "discord";
mountInHome = [ ".config/discord" ".config/BetterDiscord" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
version = "1.0.1";
copyIntoSandbox = [ "share/pixmaps" ];
desktopFileArgs = {
name = "Discord (wrapped)";
#exec = "discord";
icon = "discord";
desktopName = "Discord (wrapped)";
genericName = "Instant Messenger";
categories = "Network;InstantMessaging;";
};
};
sddm-sugar-dark = prev.callPackage ./sddm-sugar-dark {};
iptsd = prev.callPackage ./tools/daemons/iptsd {};
surface-control = prev.callPackage ./tools/system/surface-control {};
trackma = prev.callPackage ./tools/video/trackma {};
multimc-wrapped = wrapInSandbox {
name = "multimc";
package = prev.multimc;
binaryName = "multimc";
mountInHome = [ ".local/share/multimc" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
extraEnv = {
DRI_PRIME = "1";
};
};
steam-wrapped = wrapInSandbox {
name = "steam";
package = prev.steam;
binaryName = "steam";
mountInHome = [ ".steam" ".local/share/Steam" ];
additionalBlacklist = [ "/mnt" ];
additionalMounts = [ "/mnt/Storage/Games/SteamLibrary" ];
chdirTo = "/home/$USER";
extraEnv = {
DRI_PRIME = "1";
};
copyIntoSandbox = [ "/share" ];
};
android-studio-wrapped = wrapInSandbox {
name = "android-studio";
package = prev.android-studio;
binaryName = "android-studio";
additionalBlacklist = [ "/mnt" ];
mountInHome = [ "Development/Personal/Android" ".android" ];
chdirTo = "/home/$USER";
};
xournalpp-git = prev.xournalpp.overrideAttrs (old: {
version = "1.1.1";
src = prev.fetchFromGitHub {
owner = "xournalpp";
repo = "xournalpp";
rev = "master";
sha256 = "1scwnjzlp27vx5gqx8zk3zy9swwn0xhv550ig4nmjjx609ic1j7n";
};
});
gajim-mainwindow = prev.callPackage ./applications/networking/instant-messengers/gajim {
nbxmpp = prev.python3Packages.nbxmpp.overrideAttrs (old: {
src = prev.fetchFromGitLab {
domain = "dev.gajim.org";
owner = "gajim";
repo = "python-nbxmpp";
rev = "22aaefb2b36eb46a5306092496c2be680b167f61";
sha256 = "sha256-7emxKdeDuQE6OkK+umw2p1drf94yZp+P00tdEfeI81M=";
};
});
};
swaync = prev.callPackage ./tools/desktop/swaync {};
sound-gambit = prev.callPackage tools/audio/sound-gambit {};
ebu-norm = prev.callPackage tools/audio/ebu-norm {};
# TODO: Remove once NixOS has version 0.11.16 in their repos
sublime-music-no-test = prev.callPackage ./applications/audio/sublime-music {};
payload-dumper = prev.callPackage tools/system/payload-dumper {};
# TODO: Remove once upstream has a new version tagged
kasts-git = prev.libsForQt5.kasts.overrideAttrs (old: {
src = builtins.fetchTarball {
url = "https://invent.kde.org/plasma-mobile/kasts/-/archive/master/kasts-master.tar.gz";
sha256 = "1n7j4011hgscmjj728iyjgifpbnwc1sy32b5aw834n1vgxfkq00l";
};
psst = prev.callPackage tools/audio/psst {};
wlrootsqt = prev.libsForQt5.callPackage ./wlrootsqt.nix {};
#spice-gtk = prev.callPackage temp/spice-gtk/default.nix {};
discord-app = prev.callPackage applications/networking/instant-messengers/discord-app {
chromium = prev.ungoogled-chromium;
};
zoom-vm = prev.callPackage scripts/zoom-vm {};
razer-cli = prev.callPackage tools/hardware/razer-cli {};
wayfire-firedecor = prev.callPackage applications/wayfire/firedecor {
wayfire = wayfire-master;
};
sddm-sugar-dark = prev.callPackage themes/sddm/sugar-dark {};
custom-apparmor-utils = prev.callPackage temp/apparmor-utils.nix {};
qtgreet = prev.libsForQt5.callPackage applications/desktop/qtgreet {
inherit dfl-applications dfl-utils dfl-ipc wayqt;
};
kpipewire = prev.libsForQt5.callPackage development/cpp/libkpipewire {};
xwaylandvideobridge = prev.libsForQt5.callPackage applications/desktop/xwaylandvideobridge {
inherit kpipewire;
};
#obs-websocket = prev.libsForQt5.callPackage obs/obs-websocket {};
obs-cli = prev.callPackage obs/obs-cli {};
rgb_keyboard = prev.callPackage ./applications/desktop/rgb_keyboard/default.nix {};
buildInputs = old.buildInputs ++ [ prev.taglib prev.libsForQt5.qtkeychain ];
});
}

View File

@ -0,0 +1,31 @@
{ stdenv
, lib
, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-notification-timeout";
version = "unstable-2021-07-25";
src = fetchFromGitHub {
owner = "vchlum";
repo = "notification-timeout";
rev = "1f8c2a433383f974bd49869db5ae7a6d7a82d302";
sha256 = "1ndr8gn52qggq45lbdc5miz62is8im34nzmzsghcnarrm73naq59";
};
uuid = "notification-timeout@chlumskyvaclav.gmail.com";
dontBuild = true;
installPhase = ''
mkdir -p $out/share/gnome-shell/extensions/${uuid}
cp -r metadata.json extension.js prefs.js schemas/ $out/share/gnome-shell/extensions/${uuid}
'';
meta = with lib; {
description = "Gnome Shell extension for configuring notification timeout. ";
homepage = "https://github.com/vchlum/notification-timeout";
license = licenses.mit;
maintainers = [ ];
};
}

View File

@ -0,0 +1,32 @@
{ stdenv
, lib
, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "WindowIsReady-Remover";
version = "1.12";
src = fetchFromGitHub {
owner = "nunofarruca";
repo = "WindowIsReady_Remover";
rev = version;
sha256 = "0yivd8q2mkb2c40n1pndwrsv9bi2lnm3r06wk04vhjc6f8x7qj52";
};
uuid = "windowIsReady_Remover@nunofarruca@gmail.com";
dontBuild = true;
installPhase = ''
mkdir -p $out/share/gnome-shell/extensions/${uuid}
cp -r ${uuid}/* $out/share/gnome-shell/extensions/${uuid}
'';
meta = with lib; {
description = "Removes window is ready Notification";
homepage = "https://github.com/nunofarruca/WindowIsReady_Remover";
# NOTE: Wrong
license = licenses.unlicense;
maintainers = [ ];
};
}

View File

@ -1,22 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
, dfl-ipc
}:
stdenv.mkDerivation {
pname = "dfl-applications";
version = "20221012";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "Applications";
rev = "08b6740379d596f40562b37b509705f5c8af0c42";
sha256 = "1jiymrg6236572yk6rnbl183fisl4kqr5c2zji910n93zv7lqqiv";
};
buildInputs = [ qtbase meson ninja pkg-config dfl-ipc ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -1,21 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
}:
stdenv.mkDerivation {
pname = "dfl-ipc";
version = "20221012";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "IPC";
rev = "7370f8da2601a57d85d0989339f6e2fe700f9813";
sha256 = "1iv1kc9i75q56h0zi4fncf0hdf11wjzvjkik14n9nxgbz89w7cyh";
};
buildInputs = [ qtbase meson ninja pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -1,21 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
}:
stdenv.mkDerivation {
pname = "dfl-utils";
version = "20221026";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "Utils";
rev = "603f95cae18998e9ff8b205c3801699056549505";
sha256 = "0wbiaw6d2n13cpnpnk7089c9jqbwxn0dp9qz4n9cp0ic3z5w0gq4";
};
buildInputs = [ qtbase meson ninja pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -1,21 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, cmake, pkg-config
, qtbase, wrapQtAppsHook
, kwayland, ki18n, kcoreaddons
, pipewire, libepoxy, ffmpeg
}:
stdenv.mkDerivation rec {
pname = "xwaylandvideobridge";
version = "5.27.3";
src = builtins.fetchurl {
url = "https://download.kde.org/stable/plasma/${version}/${pname}-${version}.tar.xz";
sha256 = "sha256:0b95jjkfpkvc2ld3x6p7nw6kn6fkqba9q7x95ywvgag2b00jdb56";
};
buildInputs = [ qtbase kwayland ki18n kcoreaddons pipewire libepoxy ffmpeg cmake pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -1,22 +0,0 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
, wayland, wlroots_0_16
}:
stdenv.mkDerivation {
pname = "wayqt";
version = "20230112";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "wayqt";
rev = "8604391059da1acd5c5b67f44742af10919bb525";
sha256 = "0smbvmgii7f6lsylwg06d7lf83nyiggz8iz7aw3dhf5b8xdhgbaw";
};
buildInputs = [ qtbase wayland wlroots_0_16 meson ninja pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -1,31 +0,0 @@
{
pkgs
, lib
, python3Packages
, fetchFromGitea
}:
python3Packages.buildPythonPackage rec {
pname = "keyrings.gopass";
version = "1.0.0";
src = fetchFromGitea {
domain = "git.polynom.me";
owner = "PapaTutuWawa";
repo = pname;
rev = "9c3cd59e7f5ce0a742b238ff0c4761db28344713";
sha256 = "1dg3a6zx3cm9vwsqgkmc604n3fqb760nsmnrfwyfv7y5bmh5822x";
};
nativeBuildInputs = with python3Packages; [ setuptools setuptools-scm ];
doCheck = false;
meta = with lib; {
homepage = "https://git.polynom.me/PapaTutuWawa/keyrings.gopass";
description = "A python-keyring plugin for gopass";
license = licenses.gpl3;
maintainers = [];
platforms = platforms.linux;
};
}

View File

@ -1,19 +0,0 @@
{ fetchFromGitHub, python, lib, poetry2nix }:
poetry2nix.mkPoetryApplication rec {
inherit python;
src = fetchFromGitHub {
owner = "justfoolingaround";
repo = "animdl";
rev = "9167e03ecb60c21ae1ead90d1472cd7157e1d8b7";
sha256 = "1v33kxlxc38awdpxqsb6bfdw0sc45dibg0b4c0qld0pddlppm0qh";
};
projectDir = src;
doCheck = false;
meta = with lib; {
inherit (python.meta) platforms;
};
}

View File

@ -16,10 +16,10 @@ stdenv.mkDerivation rec {
'';
meta = with lib; {
description = "A High-Quality Real Time Upscaler for Anime Video";
homepage = "https://bloc97.github.io/Anime4K/";
description = "A High-Quality Real Time Upscaler for Anime Video ";
homepage = "A High-Quality Real Time Upscaler for Anime Video ";
license = licenses.mit;
maintainers = [ ];
platforms = platforms.all;
platforms = platforms.linux;
};
}

View File

@ -1,25 +0,0 @@
{ stdenv, lib, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "mpv-prescalers";
version = "20211110";
src = fetchFromGitHub {
owner = "bjin";
repo = "mpv-prescalers";
rev = "cc02ed95c1fe05b72bc21d41257c4c085e6e409b";
sha256 = "1gc1ka9i7xzxq58175q5svhvp8vr27hy477r4z4nkhp9q1cqj19d";
};
installPhase = ''
find . -type f -iname '*.hook' -exec install -Dm 644 {} -t $out/usr/share/shaders/ \;
'';
meta = with lib; {
description = "prescalers for mpv, as user shaders";
homepage = "https://github.com/bjin/mpv-prescalers";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.all;
};
}

View File

@ -1,30 +0,0 @@
{ stdenv, lib, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "mpv-shader-pack";
version = "2.0.0";
src = fetchFromGitHub {
owner = "iwalton3";
repo = "default-shader-pack";
rev = "v${version}";
sha256 = "10383h2qq35whj3v1vs34yyqiflxjf1vlv2p4l6jrmljwpjpcj4k";
};
buildPhase = ''
# Packaged by the anime4k package
rm shaders/Anime4K_*.glsl
'';
installPhase = ''
find ./shaders -type f -exec install -Dm 644 {} -t $out/usr/share/shaders/ \;
'';
meta = with lib; {
description = "Preconfigured set of MPV shaders and configurations for MPV Shim media clients.";
homepage = "https://github.com/iwalton3/default-shader-pack";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.all;
};
}

View File

@ -1,27 +0,0 @@
{ lib
, buildGoModule
, fetchFromGitHub
}:
buildGoModule rec {
pname = "obs-cli";
version = "0.5.0";
src = fetchFromGitHub {
owner = "muesli";
repo = "obs-cli";
rev = "v${version}";
hash = "sha256-4tjS+PWyP/T0zs4IGE6VQ5c+3tuqxlBwfpPBVEcim6c=";
};
vendorHash = "sha256-RGpkqX97zalZv4aDfihJBKO1l2O8tcxn0I1SPL1WIg8=";
ldflags = [ "-s" "-w" ];
meta = with lib; {
description = "OBS-cli is a command-line remote control for OBS";
homepage = "https://github.com/muesli/obs-cli";
license = licenses.mit;
maintainers = with maintainers; [ ];
};
}

View File

@ -1,39 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, cmake, ninja, pkg-config
, qtbase, wrapQtAppsHook
, nlohmann_json, asio, websocketpp
, obs-studio
}:
stdenv.mkDerivation rec {
pname = "obs-websocket";
version = "4.9.1-compat";
src = fetchFromGitHub {
owner = "obsproject";
repo = pname;
rev = "${version}";
sha256 = "14xhk6d7j2q5swfj0b7jdgmswjdkqjnj3q11qs5vbh93hk30jyvh";
};
nativeBuildInputs = [ cmake ninja pkg-config wrapQtAppsHook ];
buildInputs = [ obs-studio qtbase nlohmann_json asio websocketpp ];
cmakeFlags = [
"-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs"
"-Wno-dev"
];
preConfigure = ''
cp ${obs-studio.src}/cmake/external/ObsPluginHelpers.cmake cmake/FindLibObs.cmake
'';
meta = with lib; {
description = "Remote-control of OBS Studio through WebSocket";
homepage = "https://github.com/obsproject/obs-websocket";
license = licenses.gpl2;
platforms = [ "x86_64-linux" "i686-linux" ];
};
}

184
packages/sandbox.nix Normal file
View File

@ -0,0 +1,184 @@
{
stdenv, lib
, runCommandLocal, writeShellScriptBin, makeDesktopItem
, bubblewrap, coreutils, glibc, pkgsi686Linux
}:
{
name
, package
, binaryName
, version ? "1.0.0"
, desktopFileArgs ? null
, copyIntoSandbox ? null
, unshareUser ? true
, unshareIpc ? true
, unsharePid ? true
, unshareNet ? false
, unshareUts ? true
, unshareCgroup ? true
, dieWithParent ? true
, mountInHome ? []
, chdirTo ? "\"$(pwd)\""
, additionalBlacklist ? []
, additionalMounts ? []
, extraEnv ? {}
}:
let
etcBindFlags = let
files = [
# NixOS Compatibility
"static"
"nix" # mainly for nixUnstable users, but also for access to nix/netrc
# Shells
"bashrc"
"zshenv"
"zshrc"
"zinputrc"
"zprofile"
# Users, Groups, NSS
"passwd"
"group"
"shadow"
"hosts"
"resolv.conf"
"nsswitch.conf"
# User profiles
"profiles"
# Sudo & Su
"login.defs"
"sudoers"
"sudoers.d"
# Time
"localtime"
"zoneinfo"
# Other Core Stuff
"machine-id"
"os-release"
# PAM
"pam.d"
# Fonts
"fonts"
# ALSA
"alsa"
"asound.conf"
# SSL
"ssl/certs"
"pki"
];
in builtins.concatStringsSep "\n "
(map (file: "--ro-bind-try /etc/${file} /etc/${file}") files);
# Create this on the fly instead of linking from /nix
# The container might have to modify it and re-run ldconfig if there are
# issues running some binary with LD_LIBRARY_PATH
createLdConfCache = ''
cat > /etc/ld.so.conf <<EOF
/lib
/lib/x86_64-linux-gnu
/lib64
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib64
/lib/i386-linux-gnu
/lib32
/usr/lib/i386-linux-gnu
/usr/lib32
EOF
ldconfig &> /dev/null
'';
init = run: writeShellScriptBin "${binaryName}-init" ''
source /etc/profile
${createLdConfCache}
exec ${run} "$@"
'';
extraEnvString = lib.foldl (acc: val: acc + val + "\n") "" (lib.mapAttrsToList (name: value: "--setenv ${name} \"${value}\"") extraEnv);
mountHome = mountInHome == [];
initStr = init "${package}/bin/${binaryName}";
bwrapCmd = { initArgs ? "" }: ''
blacklist=(/nix /dev /proc /etc ${lib.optionalString (!mountHome) "/home"} ${builtins.toString additionalBlacklist})
ro_mounts=()
symlinks=()
declare -a auto_mounts
# loop through all directories in the root
for dir in /*; do
# if it is a directory and it is not in the blacklist
if [[ -d "$dir" ]] && [[ ! "''${blacklist[@]}" =~ "$dir" ]]; then
# add it to the mount list
auto_mounts+=(--bind "$dir" "$dir")
fi
done
if [[ "${lib.optionalString (!mountHome) "1"}" = "1" ]]; then
for entry in ${builtins.toString mountInHome}; do
auto_mounts+=(--bind "/home/$USER/$entry" "/home/$USER/$entry")
done
fi
if [[ ! -z "${builtins.toString additionalMounts}" ]]; then
for entry in ${builtins.toString additionalMounts}; do
auto_mounts+=(--bind "$entry" "$entry")
done
fi
cmd=(
${bubblewrap}/bin/bwrap
--dev-bind /dev /dev
--proc /proc
--chdir ${chdirTo}
${lib.optionalString unshareUser "--unshare-user"}
${lib.optionalString unshareIpc "--unshare-ipc"}
${lib.optionalString unsharePid "--unshare-pid"}
${lib.optionalString unshareNet "--unshare-net"}
${lib.optionalString unshareUts "--unshare-uts"}
${lib.optionalString unshareCgroup "--unshare-cgroup"}
${lib.optionalString dieWithParent "--die-with-parent"}
--ro-bind /nix /nix
# Our glibc will look for the cache in its own path in `/nix/store`.
# As such, we need a cache to exist there, because pressure-vessel
# depends on the existence of an ld cache. However, adding one
# globally proved to be a bad idea (see #100655), the solution we
# settled on being mounting one via bwrap.
# Also, the cache needs to go to both 32 and 64 bit glibcs, for games
# of both architectures to work.
--tmpfs ${glibc}/etc \
--symlink /etc/ld.so.conf ${glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${glibc}/etc/ld.so.cache \
--ro-bind ${glibc}/etc/rpc ${glibc}/etc/rpc \
--remount-ro ${glibc}/etc \
--tmpfs ${pkgsi686Linux.glibc}/etc \
--symlink /etc/ld.so.conf ${pkgsi686Linux.glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${pkgsi686Linux.glibc}/etc/ld.so.cache \
--ro-bind ${pkgsi686Linux.glibc}/etc/rpc ${pkgsi686Linux.glibc}/etc/rpc \
--remount-ro ${pkgsi686Linux.glibc}/etc \
${etcBindFlags}
"''${ro_mounts[@]}"
"''${symlinks[@]}"
"''${auto_mounts[@]}"
${extraEnvString}
${initStr}/bin/${name}-init ${initArgs}
)
exec "''${cmd[@]}"
'';
bin = writeShellScriptBin name (bwrapCmd { initArgs = ''"$@"''; });
desktopItem = makeDesktopItem (desktopFileArgs // {
exec = "${bin}/bin/${name}";
});
copyIntoSandboxString = lib.concatStrings (map (x: "cp -Lr ${package}/${x} $out/${x}\n") copyIntoSandbox);
in stdenv.mkDerivation {
pname = "${name}-sandboxed";
version = version;
unpackPhase = ":";
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
ln -s ${bin}/bin/${name} $out/bin/${name}
'' + lib.strings.optionalString (!(builtins.isNull desktopFileArgs)) ''
mkdir -p $out/share/
cp -r ${desktopItem}/share/applications $out/share
'' + lib.strings.optionalString (!(builtins.isNull copyIntoSandbox)) copyIntoSandboxString;
}

View File

@ -1,46 +0,0 @@
{
stdenv, lib
, makeDesktopItem, writeShellScriptBin
, virt-manager, libvirt, notify-desktop
}:
let
zoomVmScript = writeShellScriptBin "start-zoom-vm.sh" ''
${notify-desktop}/bin/notify-desktop "Zoom VM" "Starting VM..."
output=$(/run/wrappers/bin/pkexec virsh start zoom 2>&1)
if [[ ! "$?" = "0" ]]; then
${notify-desktop}/bin/notify-desktop -u critical "Zoom VM" "$output"
exit 1
fi
${virt-manager}/bin/virt-manager --connect qemu:///system --show-domain-console zoom
'';
zoomIcon = builtins.fetchurl {
url = "https://dl.flathub.org/repo/appstream/x86_64/icons/128x128/us.zoom.Zoom.png";
sha256 = "0d94vhjna2196s4wnq0vkga345ad5lpb7b5qp6cymwf1hnpg9lyh";
};
in stdenv.mkDerivation rec {
pname = "zoom-vm";
version = "1.0.0";
unpackPhase = ":";
dontBuild = true;
desktopItem = makeDesktopItem {
name = "zoom-vm";
desktopName = "Zoom (VM)";
exec = "start-zoom-vm";
icon = "us.zoom.Zoom";
};
installPhase = ''
# Install the script
mkdir -p $out/bin
cp ${zoomVmScript}/bin/start-zoom-vm.sh $out/bin/start-zoom-vm
# Install the desktop file
mkdir -p $out/share/icons
cp ${zoomIcon} $out/share/icons/us.zoom.Zoom.png
cp -r ${desktopItem}/share/applications $out/share
'';
}

View File

@ -1,101 +0,0 @@
{
fetchFromGitLab
, stdenv, lib
, makeWrapper, writeShellScript
, which, bash, libapparmor, apparmor-parser, libnotify, perl, gawk, python3
, coreutils, gnused, gnugrep
}:
let
apparmor-version = "3.0.4";
apparmor-sources = fetchFromGitLab {
owner = "apparmor";
repo = "apparmor";
rev = "v${apparmor-version}";
sha256 = "1a217j28rgfq4lsmpn0wv1xgmdr9ba8iysv9i6q477kj6z77zrb9";
};
apparmor-meta = component: with lib; {
homepage = "https://apparmor.net/";
description = "A mandatory access control system - ${component}";
license = licenses.gpl2;
maintainers = with maintainers; [ joachifm julm thoughtpolice ];
platforms = platforms.linux;
};
aa-teardown = writeShellScript "aa-teardown" ''
PATH="${lib.makeBinPath [coreutils gnused gnugrep]}:$PATH"
. ${apparmor-parser}/lib/apparmor/rc.apparmor.functions
remove_profiles
'';
setupPython = python3.withPackages (ps: with ps; [ setuptools ]);
prePatchCommon = ''
chmod a+x ./common/list_capabilities.sh ./common/list_af_names.sh
patchShebangs ./common/list_capabilities.sh ./common/list_af_names.sh
substituteInPlace ./common/Make.rules \
--replace "/usr/bin/pod2man" "${perl}/bin/pod2man" \
--replace "/usr/bin/pod2html" "${perl}/bin/pod2html" \
--replace "/usr/share/man" "share/man"
substituteInPlace ./utils/Makefile \
--replace "/usr/include/linux/capability.h" "${stdenv.cc.libc.linuxHeaders}/include/linux/capability.h"
sed --in-place ./utils/Makefile -e 's|''${PYTHON}|${setupPython}/bin/python|g'
cat ./utils/Makefile
'';
in stdenv.mkDerivation {
pname = "apparmor-utils";
version = apparmor-version;
src = apparmor-sources;
strictDeps = true;
nativeBuildInputs = [ makeWrapper which python3 ];
buildInputs = [
bash
perl
python3
libapparmor
libapparmor.python
];
prePatch = prePatchCommon +
# Do not build vim file
''
sed -i ./utils/Makefile -e "/\<vim\>/d"
'' + ''
for file in utils/apparmor/easyprof.py utils/apparmor/aa.py utils/logprof.conf; do
substituteInPlace $file --replace "/sbin/apparmor_parser" "${apparmor-parser}/bin/apparmor_parser"
done
'';
postPatch = "cd ./utils";
makeFlags = [ "LANGS=" ];
installFlags = [ "DESTDIR=$(out)" "BINDIR=$(out)/bin" "VIM_INSTALL_PATH=$(out)/share" "PYPREFIX=" ];
preInstall = ''
ls -l
'';
postInstall = ''
sed -i $out/bin/aa-unconfined -e "/my_env\['PATH'\]/d"
for prog in aa-audit aa-autodep aa-cleanprof aa-complain aa-disable aa-enforce aa-genprof aa-logprof aa-mergeprof aa-unconfined ; do
wrapProgram $out/bin/$prog --prefix PYTHONPATH : "$out/${python3.sitePackages}:$PYTHONPATH"
done
substituteInPlace $out/bin/aa-notify \
--replace /usr/bin/notify-send ${libnotify}/bin/notify-send \
--replace /usr/bin/perl "${perl}/bin/perl -I ${libapparmor}/${perl.libPrefix}"
substituteInPlace $out/bin/aa-remove-unknown \
--replace "/lib/apparmor/rc.apparmor.functions" "${apparmor-parser}/lib/apparmor/rc.apparmor.functions"
wrapProgram $out/bin/aa-remove-unknown \
--prefix PATH : ${lib.makeBinPath [ gawk ]}
ln -s ${aa-teardown} $out/bin/aa-teardown
'';
doCheck = false;
meta = apparmor-meta "user-land utilities";
}

View File

@ -1,143 +0,0 @@
{ lib, stdenv
, fetchurl
, acl
, cyrus_sasl
, docbook_xsl
, libepoxy
, gettext
, gobject-introspection
, gst_all_1
, gtk-doc
, gtk3
, hwdata
, json-glib
, libcacard
, libcap_ng
, libdrm
, libjpeg_turbo
, libopus
, libsoup
, libusb1
, lz4
, meson
, ninja
, openssl
, perl
, phodav
, pixman
, pkg-config
, polkit
, python3
, spice-protocol
, usbredir
, vala
, wayland-protocols
, zlib
, withPolkit ? true
}:
# If this package is built with polkit support (withPolkit=true),
# usb redirection reqires spice-client-glib-usb-acl-helper to run setuid root.
# The helper confirms via polkit that the user has an active session,
# then adds a device acl entry for that user.
# Example NixOS config to create a setuid wrapper for the helper:
# security.wrappers.spice-client-glib-usb-acl-helper.source =
# "${pkgs.spice-gtk}/bin/spice-client-glib-usb-acl-helper";
# On non-NixOS installations, make a setuid copy of the helper
# outside the store and adjust PATH to find the setuid version.
# If this package is built without polkit support (withPolkit=false),
# usb redirection requires read-write access to usb devices.
# This can be granted by adding users to a custom group like "usb"
# and using a udev rule to put all usb devices in that group.
# Example NixOS config:
# users.groups.usb = {};
# users.users.dummy.extraGroups = [ "usb" ];
# services.udev.extraRules = ''
# KERNEL=="*", SUBSYSTEMS=="usb", MODE="0664", GROUP="usb"
# '';
stdenv.mkDerivation rec {
pname = "spice-gtk";
version = "0.40";
outputs = [ "out" "dev" "devdoc" "man" ];
src = fetchurl {
url = "https://www.spice-space.org/download/gtk/${pname}-${version}.tar.xz";
sha256 = "sha256-I/X/f6gLdWR85zzaXq+LMi80Mtu7f286g5Y0YYrbztM=";
};
postPatch = ''
# get rid of absolute path to helper in store so we can use a setuid wrapper
substituteInPlace src/usb-acl-helper.c \
--replace 'ACL_HELPER_PATH"/' '"'
# don't try to setcap/suid in a nix builder
substituteInPlace src/meson.build \
--replace "meson.add_install_script('../build-aux/setcap-or-suid'," \
"# meson.add_install_script('../build-aux/setcap-or-suid',"
'';
nativeBuildInputs = [
docbook_xsl
gettext
gobject-introspection
gtk-doc
libsoup
meson
ninja
perl
pkg-config
python3
python3.pkgs.pyparsing
python3.pkgs.six
vala
];
propagatedBuildInputs = [
gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
];
buildInputs = [
cyrus_sasl
libepoxy
gtk3
json-glib
libcacard
libcap_ng
libdrm
libjpeg_turbo
libopus
libusb1
lz4
openssl
phodav
pixman
spice-protocol
usbredir
wayland-protocols
zlib
] ++ lib.optionals withPolkit [ polkit acl ] ;
PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/share/polkit-1/actions";
mesonFlags = [
"-Dusb-acl-helper-dir=${placeholder "out"}/bin"
"-Dusb-ids-path=${hwdata}/share/hwdata/usb.ids"
];
meta = with lib; {
description = "GTK 3 SPICE widget";
longDescription = ''
spice-gtk is a GTK 3 SPICE widget. It features glib-based
objects for SPICE protocol parsing and a gtk widget for embedding
the SPICE display into other applications such as virt-manager.
Python bindings are available too.
'';
homepage = "https://www.spice-space.org/";
license = licenses.lgpl21;
maintainers = [ maintainers.xeji ];
platforms = platforms.linux;
};
}

View File

@ -1,32 +0,0 @@
{
fetchFromGitHub
, stdenv, formats
, config ? {}
}:
# This package works a bit differently as the config needs to be inside the package.
# Override with config set to the settings you want. See
# https://github.com/MarianArlt/sddm-sugar-dark/blob/master/theme.conf
let
iniFmt = formats.ini {};
configFile = iniFmt.generate "theme.conf" config;
in stdenv.mkDerivation rec {
pname = "sddm-sugar-dark";
version = "1.2";
src = fetchFromGitHub {
owner = "MarianArlt";
repo = "sddm-sugar-dark";
rev = "v${version}";
sha256 = "0gx0am7vq1ywaw2rm1p015x90b75ccqxnb1sz3wy8yjl27v82yhb";
};
dontBuild = true;
installPhase = ''
mkdir -p $out/usr/share/sddm/themes/sugar-dark
cp -r metadata.desktop Main.qml Background.jpg Components Assets $out/usr/share/sddm/themes/sugar-dark
ln -s ${configFile} $out/usr/share/sddm/themes/sugar-dark/theme.conf
'';
}

View File

@ -1,111 +0,0 @@
diff --git a/ebu-norm b/ebu-norm
index ab5fdfe..57d4ca8 100755
--- a/ebu-norm
+++ b/ebu-norm
@@ -12,21 +12,6 @@ THR=-1
# sound-gambit release time (default 10, range 1 to 1000)
REL=10
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in {ffmpeg,bc,sound-gambit}; \
- do checkAvail "$tool"; done
-
#Check for audio files
NUMARG=0
for file in "$@"; do
diff --git a/ebu-plot b/ebu-plot
index 5fb7438..4612fff 100755
--- a/ebu-plot
+++ b/ebu-plot
@@ -23,21 +23,6 @@ then
fi
done
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in {pwsh,ffmpeg,gnuplot}; \
- do checkAvail "$tool"; done
-
# Command usage check
if [ $# -eq 0 ]
then
@@ -82,4 +67,4 @@ echo "Done!"
echo
echo "Skipped items: $SKIPPED"
cat $SKIPFILE
-rm $SKIPFILE
\ No newline at end of file
+rm $SKIPFILE
diff --git a/ebu-scan b/ebu-scan
index 11736d6..8190223 100755
--- a/ebu-scan
+++ b/ebu-scan
@@ -4,21 +4,6 @@
# Usage: ebu-scan <input files>.
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in ffmpeg ; \
- do checkAvail "$tool"; done
-
#Check for audio files and enumerate
NUMARG=0
for file in "$@"; do
diff --git a/tp-norm b/tp-norm
index b8e4997..894f440 100755
--- a/tp-norm
+++ b/tp-norm
@@ -6,21 +6,6 @@
# Option:
# -t Specify true peak target, e.g. -t -2
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in {ffmpeg,bc}; \
- do checkAvail "$tool"; done
-
#Check for audio files
NUMARG=0
for file in "$@"; do

View File

@ -1,41 +0,0 @@
{ stdenv, ffmpeg, sound-gambit, gawk, bc, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "ebu-norm";
version = "2.2";
src = fetchFromGitHub {
owner = "chrismhampson";
repo = "ebu-norm";
rev = "v${version}";
sha256 = "120rpi0k3rq0v50ia9cyailgnx5wvpgkzbp8vi74xmr3c0lf26r4";
};
patches = [ ./0000-remove-dep-check.patch ];
buildInputs = [
ffmpeg sound-gambit gawk bc
];
postPatch = ''
for file in ebu-scan ebu-plot ebu-norm tp-norm; do
sed --in-place \
-e "s|ffmpeg|${ffmpeg}/bin/ffmpeg|g" \
-e "s|bc|${bc}/bin/bc|g" \
-e "s|sound-gambit|${sound-gambit}/bin/sound-gambit|g" \
$file
done
'';
installPhase = ''
mkdir -p $out/bin
cp {ebu-scan,ebu-plot,ebu-norm,tp-norm} $out/bin/
'';
meta = with lib; {
description = "An advanced, professional batch normalizer and scanner for EBU R 128 and other target levels.";
homepage = "https://github.com/chrismhampson/ebu-norm";
license = licenses.gpl3;
maintainers = [ ];
};
}

View File

@ -1,42 +0,0 @@
{ lib
, rustPlatform
, fetchFromGitHub
, pkg-config
, cairo
, openssl
, alsa-lib
, dbus
, gtk3
}:
rustPlatform.buildRustPackage rec {
pname = "psst";
version = "1.2.1";
src = fetchFromGitHub {
owner = "jpochyla";
repo = "psst";
rev = "8f142a3232a706537c8477bff43d2e52309f6b78";
sha256 = "00pdijd70rq98lrrfgh6pzqa6w3pp49lmpzaviw7nrgfl7l6j3v0";
};
cargoSha256 = "sha256-/nbYi7n58D8V3qa9rStg7JfGh4sAhTxC2niFFW5Ta34=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [ cairo openssl gtk3 alsa-lib dbus ];
postInstall = ''
# Install the desktop file
mkdir -p $out/share
cp .pkg/psst.desktop $out/share/
'';
meta = with lib; {
description = "A modern Volume Mixer for PulseAudio";
homepage = "https://github.com/Aurailus/Myxer";
license = licenses.gpl3Only;
maintainers = with maintainers; [ erin ];
platforms = platforms.linux;
};
}

View File

@ -1,26 +0,0 @@
{ stdenv, lib, libsndfile, gnumake, pkg-config, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "sound-gambit";
version = "0.6";
src = fetchFromGitHub {
owner = "x42";
repo = "sound-gambit";
rev = "v${version}";
sha256 = "18yf7sp6r8gqlifs9zq23ddsi5d46i6sadnh6jnvll3mhgm0h8bv";
};
buildInputs = [ libsndfile pkg-config ];
makeFlags = [
"PREFIX=${placeholder "out"}"
];
meta = with lib; {
description = "Audio File Peak Limiter";
homepage = "https://github.com/x42/sound-gambit";
license = licenses.gpl3;
maintainers = [ ];
};
}

View File

@ -0,0 +1,42 @@
{
stdenv, lib
, fetchFromGitHub
, meson, cmake, ninja, pkg-config
, inih, systemd
}:
stdenv.mkDerivation rec {
pname = "iptsd";
version = "0.4";
src = fetchFromGitHub {
owner = "linux-surface";
repo = pname;
rev = "v${version}";
sha256 = "0bh7rr37yck82g41dw2xcfkmyp1ncd27n1slb8xlknp7vs9f10qa";
};
mesonFlags = [
"-Dsample_config=false"
"-Ddebug_tool=false"
];
patches = [
./meson.patch
];
postPatch = ''
sed -e "s|@UDEVRULESDIR@|$out/lib/udev/rules.d/|" --in-place meson.build
'';
nativeBuildInputs = [ meson cmake ninja pkg-config ];
buildInputs = [ inih systemd ];
meta = with lib; {
homepage = "https://github.com/linux-surface/iptsd";
description = "Userspace daemon for Intel Precise Touch & Stylus";
license = licenses.gpl2;
maintainers = [];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,32 @@
diff --git a/meson.build b/meson.build
index b74a177..ca41ba3 100644
--- a/meson.build
+++ b/meson.build
@@ -104,18 +104,19 @@ configure_file(
service_manager = get_option('service_manager')
if service_manager.contains('systemd')
systemd = dependency('systemd')
- unitdir = systemd.get_pkgconfig_variable('systemdsystemunitdir')
+ #unitdir = systemd.get_pkgconfig_variable('systemdsystemunitdir')
udev = dependency('udev')
- udevdir = udev.get_pkgconfig_variable('udevdir')
- rulesdir = join_paths(udevdir, 'rules.d')
+ #udevdir = udev.get_pkgconfig_variable('udevdir')
+ #udevdir = '@UDEVDIR@';
+ #rulesdir = join_paths('@UDEVDIR@', 'rules.d')
- install_data(
- join_paths(meson.current_build_dir(), 'iptsd.service'),
- install_dir: unitdir
- )
+########install_data(
+######## join_paths(meson.current_build_dir(), 'iptsd.service'),
+######## install_dir: unitdir
+########)
- install_data('etc/udev/50-ipts.rules', install_dir: rulesdir)
+ install_data('etc/udev/50-ipts.rules', install_dir: '@UDEVRULESDIR@')
endif
if service_manager.contains('openrc')

View File

@ -0,0 +1,17 @@
diff --git a/setup.py b/setup.py
index 99d298e..74a7948 100644
--- a/setup.py
+++ b/setup.py
@@ -107,6 +107,12 @@ setup(
('/usr/bin/', ['bin/key-mapper-control']),
('/usr/bin/', ['bin/key-mapper-helper']),
],
+ scripts=[
+ 'bin/key-mapper-gtk',
+ 'bin/key-mapper-service',
+ 'bin/key-mapper-control',
+ 'bin/key-mapper-helper'
+ ],
install_requires=[
'setuptools',
'evdev',

View File

@ -0,0 +1,74 @@
{
pkgs, lib
, python3Packages, python3
, gtk3, gobject-introspection, git, gnome
, wrapGAppsHook
, makeDesktopItem
, fetchFromGitHub
}:
python3Packages.buildPythonApplication rec {
pname = "key-mapper";
version = "1.2.1";
buildInputs = [ gobject-introspection gtk3 gnome.adwaita-icon-theme ];
nativeBuildInputs = [ wrapGAppsHook ];
propagatedBuildInputs = with python3.pkgs; [ setuptools pydbus evdev pygobject3 ];
src = fetchFromGitHub {
owner = "sezanzeb";
repo = "key-mapper";
rev = version;
sha256 = "07dgp4vays1w4chhd22vlp9bxc49lcgzkvmjqgbr00m3781yjsf7";
};
doCheck = false;
strictDeps = false;
patches = [
./add-scripts.patch
./hack-data-dir.patch
];
# Fix keymapper not finding its data files
preBuild = ''
sed -e "s|@@NIXOS_OUT_PATH@@|$out/usr/share/key-mapper|" --in-place keymapper/data.py
'';
# Required as we otherwise don't get the dbus policy installed
# correctly
preInstall = ''
# see https://github.com/pypa/setuptools/issues/130
${python3}/bin/${python3.executable} setup.py install_data --install-dir=$out --root=$out
'';
postInstall = ''
# Install the udev rules
mkdir -p $out/lib/udev/rules.d
cp data/key-mapper.rules $out/lib/udev/rules.d/key-mapper.rules
sed --in-place -e "s|/bin/key-mapper-control|$out/bin/key-mapper-control|" $out/lib/udev/rules.d/key-mapper.rules
# Install the desktop file
mkdir -p $out/share/icons/hicolor/scalable/apps/
cp -r ${desktopItem}/share/applications $out/share/
cp $out/usr/share/key-mapper/key-mapper.svg $out/share/icons/hicolor/scalable/apps/key-mapper.svg
'';
desktopItem = makeDesktopItem {
name = "key-mapper";
exec = "key-mapper-gtk";
icon = "key-mapper";
desktopName = "key-mapper";
genericName = "key-mapper";
};
meta = with lib; {
homepage = "https://github.com/sezanzeb/key-mapper";
description = "A tool to change the mapping of your input device buttons";
license = licenses.gpl3;
maintainers = [ ];
platforms = lib.platforms.linux;
};
}

View File

@ -0,0 +1,12 @@
diff --git a/keymapper/data.py b/keymapper/data.py
index 6f3e428..8eded95 100644
--- a/keymapper/data.py
+++ b/keymapper/data.py
@@ -68,6 +68,7 @@ def get_data_path(filename=""):
"/usr/share/key-mapper",
"/usr/local/share/key-mapper",
os.path.join(site.USER_BASE, "share/key-mapper"),
+ "@@NIXOS_OUT_PATH@@",
]
if data is None:

View File

@ -1,5 +1,5 @@
{ stdenv, lib,
pkg-config, cmake, ffmpeg, libdrm, libpulseaudio, xorg, libnotify,
pkgconfig, cmake, ffmpeg, libdrm, libpulseaudio, xorg, libnotify,
fetchgit }:
stdenv.mkDerivation rec {
@ -8,13 +8,13 @@ stdenv.mkDerivation rec {
src = fetchgit {
url = "https://github.com/matanui159/${pname}.git";
rev = version;
sha256 = "sha256-nzilMEAOOLrdtfal+y81WJr6LwOVaQpuheIsSN5m83A=";
rev = "d8d5921988b5161004aed6209bd88251d721611d";
sha256 = "14m67mlfp0zh9s0bhz1qxppivw2aignxqb51xb5cy3v8farxmcv4";
deepClone = true;
};
nativeBuildInputs = [
pkg-config cmake
pkgconfig cmake
];
buildInputs = [

View File

@ -1,62 +0,0 @@
{ stdenv, lib,
pkgconfig, cmake, ffmpeg, libdrm, libpulseaudio, xorg,
libcap, wayland, libopus, boost, openssl, libevdev, mesa,
fetchgit
}:
stdenv.mkDerivation rec {
pname = "sunehine";
version = "0.10.1";
src = fetchgit {
url = "https://github.com/loki-47-6F-64/sunshine.git";
rev = "v${version}";
sha256 = "1aw8bis5v7rb3ixl378gqm34rx3sja7pp5g6kjd9b0yvl1bgxai6";
deepClone = true;
};
nativeBuildInputs = [
pkgconfig cmake
];
buildInputs = [
wayland # Wayland
libdrm libcap # KMS
xorg.libxcb xorg.libX11 xorg.libXtst xorg.libXrandr xorg.libXfixes libevdev # X11
libopus libpulseaudio boost ffmpeg openssl # Common
];
propagatedBuildInputs = [ mesa ];
cmakeFlags = [
"-DSUNSHINE_ENABLE_X11=off"
"-DSUNSHINE_ENABLE_CUDA=off"
"-DCMAKE_BUILD_TYPE=Release"
];
NIX_CFLAGS_COMPILE = "-Wformat";
patches = [ ./fuck.patch ];
preConfigure = ''
# Fix hardcoded path to libevdev
sed \
-e "s|/usr/include/libevdev-1.0|${libevdev}/include/libevdev-1.0|" \
-e "s|@@SUNSHINE_ASSETS_DIR@@|$out/share/sunshine|" \
--in-place CMakeLists.txt
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/share/sunshine/
cp -r ../assets $out/share/sunshine/assets
mv sunshine $out/bin/sunshine
'';
meta = with lib; {
description = "Host for Moonlight Streaming Client ";
homepage = "https://github.com/loki-47-6F-64/sunshine";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.linux;
};
}

View File

@ -1,15 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 45d4bf7..bd8c638 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -241,9 +241,7 @@ else()
list(APPEND SUNSHINE_COMPILE_OPTIONS -O3)
endif()
-if(NOT SUNSHINE_ASSETS_DIR)
- set(SUNSHINE_ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
-endif()
+set(SUNSHINE_ASSETS_DIR "@@SUNSHINE_ASSETS_DIR@@/assets")
if(NOT SUNSHINE_CONFIG_DIR)
set(SUNSHINE_CONFIG_DIR "${SUNSHINE_ASSETS_DIR}")

View File

@ -1,22 +0,0 @@
{
lib,
fetchFromGitHub,
python3, xorg
}:
python3.pkgs.buildPythonPackage rec {
pname = "razer-cli";
version = "2.1.0";
src = fetchFromGitHub {
owner = "LoLei";
repo = "razer-cli";
rev = "v${version}";
sha256 = "0vcyssswsw7gzk2xlpvcqc9fgvwxzyivsqmw5r9b391dv3wpr1y7";
};
doCheck = false;
buildInputs = [ xorg.xrdb ];
propagatedBuildInputs = with python3.pkgs; [ setuptools openrazer ];
}

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