Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 20 additions & 110 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

180 changes: 133 additions & 47 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,149 @@
description = "Settings daemon for the COSMIC desktop environment";

inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
flake-utils.url = "github:numtide/flake-utils";
nix-filter.url = "github:numtide/nix-filter";
crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
fenix = {
url = "github:nix-community/fenix";
nixpkgs.url = "nixpkgs/nixos-unstable";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};

outputs = { self, nixpkgs, flake-utils, nix-filter, crane, fenix }:
flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system:
let
pkgs = nixpkgs.legacyPackages.${system};
craneLib = crane.lib.${system}.overrideToolchain fenix.packages.${system}.stable.toolchain;

pkgDef = {
src = nix-filter.lib.filter {
root = ./.;
include = [
./src
./Cargo.toml
./Cargo.lock
];
};
nativeBuildInputs = with pkgs; [ pkg-config ];
outputs =
{
self,
nixpkgs,
rust-overlay,
}:
let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;

pkgsForSystem =
system:
import nixpkgs {
inherit system;
overlays = [ (import rust-overlay) ];
};

commonFor =
system:
let
pkgs = pkgsForSystem system;
rustToolchain = pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
buildInputs = with pkgs; [
systemd # For libudev
rustToolchain
libxkbcommon
libinput
libpulseaudio.dev
pipewire.dev
systemd
openssl
udev
];

nativeBuildInputs = with pkgs; [
pkg-config
];
};

cargoArtifacts = craneLib.buildDepsOnly pkgDef;
cosmic-settings-daemon = craneLib.buildPackage (pkgDef // {
inherit cargoArtifacts;
});
in {
checks = {
inherit cosmic-settings-daemon;
runtimeDependencies = with pkgs; [
];
in
{
inherit
pkgs
rustToolchain
buildInputs
nativeBuildInputs
runtimeDependencies
;
};
in
{
packages = forAllSystems (
system:
let
c = commonFor system;
rustPlatform = c.pkgs.makeRustPlatform {
cargo = c.rustToolchain;
rustc = c.rustToolchain;
};
in
{
default = self.packages.${system}.cosmic-settings-daemon;
cosmic-settings-daemon = rustPlatform.buildRustPackage {
pname = "cosmic-settings-daemon";
version = "1.m.M-dev";

packages.default = cosmic-settings-daemon;
src = c.pkgs.lib.fileset.toSource {
root = ./.;
fileset = c.pkgs.lib.fileset.unions [
./config
./cosmic-settings-daemon-config
./data
./geonames
./src
./Cargo.toml
./Cargo.lock
./Makefile
];
};

apps.default = flake-utils.lib.mkApp {
drv = cosmic-settings-daemon;
};
cargoLock = {
lockFile = ./Cargo.lock;
allowBuiltinFetchGit = true;
};

devShells.default = pkgs.mkShell {
inputsFrom = builtins.attrValues self.checks.${system};
};
});
separateDebugInfo = true;

nixConfig = {
# Cache for the Rust toolchain in fenix
extra-substituters = [ "https://nix-community.cachix.org" ];
extra-trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
};
buildInputs = c.buildInputs;
nativeBuildInputs = c.nativeBuildInputs;
runtimeDependencies = c.runtimeDependencies;

makeFlags = [
"prefix=${placeholder "out"}"
"CARGO_TARGET_DIR=target/${c.pkgs.stdenv.hostPlatform.rust.cargoShortTarget}"
];

dontCargoInstall = true;

meta = with c.pkgs.lib; {
description = "Settings daemon for the COSMIC desktop environment";
homepage = "https://github.com/pop-os/cosmic-settings-daemon";
license = licenses.gpl3Only;
platforms = platforms.linux;
mainProgram = "cosmic-settings-daemon";
};

};
}
);

devShells = forAllSystems (
system:
let
c = commonFor system;
in
{
default = c.pkgs.mkShell {
inputsFrom = [ self.packages.${system}.cosmic-settings-daemon ];

packages = with c.pkgs; [
c.rustToolchain
rust-analyzer
];

LD_LIBRARY_PATH = c.pkgs.lib.makeLibraryPath c.runtimeDependencies;
RUSTFLAGS = "-C link-arg=-Wl,-rpath,${c.pkgs.lib.makeLibraryPath c.runtimeDependencies}";

shellHook = ''
echo "COSMIC Settings Daemon development environment"
echo "Run 'cargo build' to build, 'cargo test' to test"
'';
};
}
);
};
}