Compare commits

...

10 commits

Author SHA1 Message Date
67fa717ca2
feat(scripts): improve create-gpg-key
Some checks failed
Test / tests (push) Failing after 1h0m37s
2025-05-18 20:23:46 +02:00
3e711ad998
fix: ignore .envrc for shellcheck 2025-05-18 19:50:24 +02:00
cf42ef54d8
chore: remove custom brlaser
NixOS 25.05 has switched to Owl-Maintain's fork of brlaser with the
latest release that includes the fix for my duplex printing issues.
2025-05-18 19:42:55 +02:00
f25ca7a488
fix: share pkgs & overlays with home-manager 2025-05-18 19:32:31 +02:00
a04fca65d8
feat(home): use home-manager's new flake module 2025-05-18 17:24:57 +02:00
e34e0cae22
refactor(desktop): migrate from cosmic-nix to upstream NixOS module 2025-05-18 17:18:53 +02:00
418fc173e6
chore: upgrade to NixOS 25.05 2025-05-18 17:10:31 +02:00
1ace6186cf
feat(home): replace warp with localsend & onionshare-gui 2025-05-18 16:27:49 +02:00
b012eb8a6a
feat(home): replace yubikey-manager-qt with yubioath-flutter 2025-05-18 16:27:26 +02:00
2388205a24
chore(home): remove teams-for-linux 2025-05-18 16:26:46 +02:00
25 changed files with 215 additions and 374 deletions

View file

@ -1,10 +1,8 @@
{ inputs, lib, ... }: { pkgs, lib, ... }:
{ {
imports = [ inputs.nixos-cosmic.nixosModules.default ]; services.desktopManager.cosmic.enable = true;
# TODO at the moment COSMIC cannot be used alongside Gnome
# https://github.com/lilyinstarlight/nixos-cosmic/issues/17
specialisation = { specialisation = {
cosmic.configuration = { cosmic.configuration = {
services.xserver.displayManager.gdm.enable = lib.mkForce false; services.xserver.displayManager.gdm.enable = lib.mkForce false;

95
flake.lock generated
View file

@ -155,22 +155,6 @@
} }
}, },
"flake-compat_3": { "flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1746162366,
"narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=",
"owner": "nix-community",
"repo": "flake-compat",
"rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1696426674,
@ -294,16 +278,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1747331121, "lastModified": 1747556831,
"narHash": "sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8=", "narHash": "sha256-Qb84nbYFFk0DzFeqVoHltS2RodAYY5/HZQKE8WnBDsc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "1eec32f0efe3b830927989767a9e6ece0d82d608", "rev": "d0bbd221482c2713cccb80220f3c9d16a6e20a33",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-24.11", "ref": "release-25.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
@ -346,29 +330,6 @@
"type": "github" "type": "github"
} }
}, },
"nixos-cosmic": {
"inputs": {
"flake-compat": "flake-compat_3",
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1747566515,
"narHash": "sha256-mBT3EypUn1HZ5iRGDmZQPtVNYxQxnkIsasggSCndYjw=",
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"rev": "93f3add95306179d15f8a6b1cfc87bfdc1702a33",
"type": "github"
},
"original": {
"owner": "lilyinstarlight",
"repo": "nixos-cosmic",
"type": "github"
}
},
"nixos-hardware": { "nixos-hardware": {
"locked": { "locked": {
"lastModified": 1747129300, "lastModified": 1747129300,
@ -386,32 +347,16 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1747335874, "lastModified": 1747428706,
"narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=", "narHash": "sha256-XVds9FkRrY59xRNNq14FNsFGqDiexXX/mlHcX4hPyyk=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858", "rev": "2e1496bf8652ff4af4e4d4737277f71e4a4f5cb2",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixos-24.11", "ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1747335874,
"narHash": "sha256-IKKIXTSYJMmUtE+Kav5Rob8SgLPnfnq4Qu8LyT4gdqQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ba8b70ee098bc5654c459d6a95dfc498b91ff858",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.11",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -472,7 +417,7 @@
}, },
"pre-commit-hooks": { "pre-commit-hooks": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_4", "flake-compat": "flake-compat_3",
"gitignore": "gitignore", "gitignore": "gitignore",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
@ -502,7 +447,6 @@
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"matrix-appservices": "matrix-appservices", "matrix-appservices": "matrix-appservices",
"nixos-cosmic": "nixos-cosmic",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
@ -511,27 +455,6 @@
"pre-commit-hooks": "pre-commit-hooks" "pre-commit-hooks": "pre-commit-hooks"
} }
}, },
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nixos-cosmic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1747535902,
"narHash": "sha256-rKWBtLcqQeu8PpfKIBn1ORXS2udSH/MwnQFwfSpFOLg=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "b7a99615d26b82c39b73ccc9026545c3f3403b71",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,

View file

@ -4,18 +4,16 @@ rec {
nixConfig = { nixConfig = {
extra-substituters = [ extra-substituters = [
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://cosmic.cachix.org/"
"https://felschr.cachix.org" "https://felschr.cachix.org"
]; ];
extra-trusted-public-keys = [ extra-trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE="
"felschr.cachix.org-1:raomy5XA2tsVkBoG6wo70ARIn+V24IXhWaSe3QZo12A=" "felschr.cachix.org-1:raomy5XA2tsVkBoG6wo70ARIn+V24IXhWaSe3QZo12A="
]; ];
}; };
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
@ -29,7 +27,7 @@ rec {
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-24.11"; url = "github:nix-community/home-manager/release-25.05";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@ -69,11 +67,6 @@ rec {
flake = false; flake = false;
}; };
nixos-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "nixpkgs";
};
openwrt-imagebuilder = { openwrt-imagebuilder = {
url = "github:astro/nix-openwrt-imagebuilder"; url = "github:astro/nix-openwrt-imagebuilder";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@ -82,12 +75,7 @@ rec {
}; };
outputs = outputs =
{ inputs:
self,
nixpkgs,
nixpkgs-unstable,
...
}@inputs:
inputs.flake-parts.lib.mkFlake { inherit inputs; } { inputs.flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ systems = [
"x86_64-linux" "x86_64-linux"
@ -98,7 +86,7 @@ rec {
./lib/flake-module.nix ./lib/flake-module.nix
./hosts/flake-module.nix ./hosts/flake-module.nix
./home/flake-module.nix ./home/flake-module.nix
./overlays.nix ./overlays/flake-module.nix
]; ];
flake = { flake = {
inherit nixConfig; inherit nixConfig;
@ -117,11 +105,6 @@ rec {
... ...
}: }:
{ {
_module.args.pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
devShells.default = pkgs.mkShell { inherit (config.checks.pre-commit) shellHook; }; devShells.default = pkgs.mkShell { inherit (config.checks.pre-commit) shellHook; };
checks = { checks = {
@ -129,7 +112,10 @@ rec {
src = ./.; src = ./.;
hooks = { hooks = {
nixfmt-rfc-style.enable = true; nixfmt-rfc-style.enable = true;
shellcheck.enable = true; shellcheck = {
enable = true;
excludes = [ ".envrc" ];
};
}; };
}; };
}; };

View file

@ -65,15 +65,16 @@ in
private = { private = {
id = 0; id = 0;
extraConfig = sharedExtraConfig; extraConfig = sharedExtraConfig;
extensions = commonExtensions; extensions.packages = commonExtensions;
}; };
work = { work = {
id = 1; id = 1;
extraConfig = sharedExtraConfig; extraConfig = sharedExtraConfig;
extensions = extensions.packages =
commonExtensions commonExtensions
++ (with firefox-addons; [ ++ (with firefox-addons; [
bitwarden # dashlane
# bitwarden
react-devtools react-devtools
reduxdevtools reduxdevtools
]); ]);

View file

@ -50,124 +50,145 @@ let
commonSearch = { commonSearch = {
force = true; force = true;
# TODO defaults don't work # TODO defaults don't work
default = "Qwant"; default = "qwant";
privateDefault = "Qwant"; privateDefault = "qwant";
order = [ order = [
"Qwant" "qwant"
"Ecosia" "ecosia"
"DuckDuckGo" "ddg"
"Startpage" "startpage"
"kagi" "kagi"
]; ];
engines = { engines = {
# builtin # builtin
"Startpage".metaData.alias = "@s"; startpage.metaData.alias = "@s";
"DuckDuckGo".metaData.alias = "@d"; ddg.metaData.alias = "@d";
# extra # extra
"Qwant" = { qwant = {
name = "Qwant";
urls = [ { template = "https://www.qwant.com/?q={searchTerms}"; } ]; urls = [ { template = "https://www.qwant.com/?q={searchTerms}"; } ];
iconURL = "https://www.qwant.com/favicon.ico"; iconMapObj."16" = "https://www.qwant.com/favicon.ico";
definedAliases = [ "@q" ]; definedAliases = [ "@q" ];
}; };
"Ecosia" = { ecosia = {
name = "Ecosia";
urls = [ { template = "https://www.ecosia.org/search?q={searchTerms}"; } ]; urls = [ { template = "https://www.ecosia.org/search?q={searchTerms}"; } ];
iconURL = "https://www.ecosia.org/favicon.ico"; iconMapObj."16" = "https://www.ecosia.org/favicon.ico";
definedAliases = [ "@e" ]; definedAliases = [ "@e" ];
}; };
"kagi" = { kagi = {
name = "Kagi";
urls = [ { template = "https://kagi.com/search?q={searchTerms}"; } ]; urls = [ { template = "https://kagi.com/search?q={searchTerms}"; } ];
iconURL = "https://kagi.com/favicon.ico"; iconMapObj."16" = "https://kagi.com/favicon.ico";
definedAliases = [ "@k" ]; definedAliases = [ "@k" ];
}; };
"GitHub" = { github = {
name = "GitHub";
urls = [ { template = "https://github.com/search?q={searchTerms}"; } ]; urls = [ { template = "https://github.com/search?q={searchTerms}"; } ];
iconURL = "https://github.com/favicon.ico"; iconMapObj."16" = "https://github.com/favicon.ico";
definedAliases = [ "@gh" ]; definedAliases = [ "@gh" ];
}; };
"GitLab" = { gitlab = {
name = "GitLab";
urls = [ { template = "https://gitlab.com/search?search={searchTerms}"; } ]; urls = [ { template = "https://gitlab.com/search?search={searchTerms}"; } ];
iconURL = "https://gitlab.com/favicon.ico"; iconMapObj."16" = "https://gitlab.com/favicon.ico";
definedAliases = [ "@gl" ]; definedAliases = [ "@gl" ];
}; };
"Codeberg" = { codeberg = {
name = "Codeberg";
urls = [ { template = "https://codeberg.org/explore/repos?q={searchTerms}"; } ]; urls = [ { template = "https://codeberg.org/explore/repos?q={searchTerms}"; } ];
iconURL = "https://codeberg.org/favicon.ico"; iconMapObj."16" = "https://codeberg.org/favicon.ico";
definedAliases = [ "@cb" ]; definedAliases = [ "@cb" ];
}; };
"Nix Packages" = { nix-packages = {
name = "Nix Packages";
urls = [ { template = "https://search.nixos.org/packages?query={searchTerms}"; } ]; urls = [ { template = "https://search.nixos.org/packages?query={searchTerms}"; } ];
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ]; definedAliases = [ "@np" ];
}; };
"NixOS Options" = { nixos-options = {
name = "NixOS Options";
urls = [ { template = "https://search.nixos.org/options?query={searchTerms}"; } ]; urls = [ { template = "https://search.nixos.org/options?query={searchTerms}"; } ];
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ]; definedAliases = [ "@no" ];
}; };
"Nix Flakes: Packages" = { nix-flakes-packages = {
name = "Nix Flakes: Packages";
urls = [ { template = "https://search.nixos.org/flakes?type=packages&query={searchTerms}"; } ]; urls = [ { template = "https://search.nixos.org/flakes?type=packages&query={searchTerms}"; } ];
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nfp" ]; definedAliases = [ "@nfp" ];
}; };
"Nix Flakes: Options" = { nix-flakes-options = {
name = "Nix Flakes: Options";
urls = [ { template = "https://search.nixos.org/flakes?type=options&query={searchTerms}"; } ]; urls = [ { template = "https://search.nixos.org/flakes?type=options&query={searchTerms}"; } ];
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nfo" ]; definedAliases = [ "@nfo" ];
}; };
"NixOS Wiki" = { nixos-wiki = {
name = "NixOS Wiki";
urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ]; urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ];
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nw" ]; definedAliases = [ "@nw" ];
}; };
"Crates.io" = { crates-io = {
name = "Crates.io";
urls = [ { template = "https://crates.io/search?q={searchTerms}"; } ]; urls = [ { template = "https://crates.io/search?q={searchTerms}"; } ];
iconURL = "https://crates.io/favicon.ico"; iconMapObj."16" = "https://crates.io/favicon.ico";
definedAliases = [ "@rc" ]; definedAliases = [ "@rc" ];
}; };
"Docs.rs" = { docs-rs = {
name = "Docs.rs";
urls = [ { template = "https://docs.rs/releases/search?query={searchTerms}"; } ]; urls = [ { template = "https://docs.rs/releases/search?query={searchTerms}"; } ];
iconURL = "https://docs.rs/favicon.ico"; iconMapObj."16" = "https://docs.rs/favicon.ico";
definedAliases = [ "@rd" ]; definedAliases = [ "@rd" ];
}; };
"Rust Book" = { rust-book = {
name = "Rust Book";
urls = [ { template = "https://doc.rust-lang.org/book/?search={searchTerms}"; } ]; urls = [ { template = "https://doc.rust-lang.org/book/?search={searchTerms}"; } ];
iconURL = "https://doc.rust-lang.org/book/favicon.svg"; iconMapObj."16" = "https://doc.rust-lang.org/book/favicon.svg";
definedAliases = [ "@rb" ]; definedAliases = [ "@rb" ];
}; };
"Rust std" = { rust-std = {
name = "Rust std";
urls = [ { template = "https://doc.rust-lang.org/stable/std/?search={searchTerms}"; } ]; urls = [ { template = "https://doc.rust-lang.org/stable/std/?search={searchTerms}"; } ];
iconURL = "https://www.rust-lang.org/static/images/favicon.svg"; iconMapObj."16" = "https://www.rust-lang.org/static/images/favicon.svg";
definedAliases = [ "@rs" ]; definedAliases = [ "@rs" ];
}; };
"npm" = { npm = {
name = "npm";
urls = [ { template = "https://www.npmjs.com/search?q={searchTerms}"; } ]; urls = [ { template = "https://www.npmjs.com/search?q={searchTerms}"; } ];
iconURL = "https://static-production.npmjs.com/da3ab40fb0861d15c83854c29f5f2962.png"; iconMapObj."16" = "https://static-production.npmjs.com/da3ab40fb0861d15c83854c29f5f2962.png";
definedAliases = [ "@npm" ]; definedAliases = [ "@npm" ];
}; };
"PyPI" = { pypi = {
name = "PyPI";
urls = [ { template = "https://pypi.org/search/?q={searchTerms}"; } ]; urls = [ { template = "https://pypi.org/search/?q={searchTerms}"; } ];
iconURL = "https://pypi.org/favicon.ico"; iconMapObj."16" = "https://pypi.org/favicon.ico";
definedAliases = [ "@pypi" ]; definedAliases = [ "@pypi" ];
}; };
"Stack Overflow" = { stack-overflow = {
name = "Stack Overflow";
urls = [ { template = "https://stackoverflow.com/search?q={searchTerms}"; } ]; urls = [ { template = "https://stackoverflow.com/search?q={searchTerms}"; } ];
iconURL = "https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico"; iconMapObj."16" = "https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico";
definedAliases = [ "@so" ]; definedAliases = [ "@so" ];
}; };
"Wikipedia" = { wikipedia = {
name = "Wikipedia";
urls = [ { template = "https://en.wikipedia.org/wiki/{searchTerms}"; } ]; urls = [ { template = "https://en.wikipedia.org/wiki/{searchTerms}"; } ];
iconURL = "https://en.wikipedia.org/favicon.ico"; iconMapObj."16" = "https://en.wikipedia.org/favicon.ico";
definedAliases = [ "@w" ]; definedAliases = [ "@w" ];
}; };
"Wolfram Alpha" = { wolfram-alpha = {
name = "Wolfram Alpha";
urls = [ { template = "https://www.wolframalpha.com/input?i={searchTerms}"; } ]; urls = [ { template = "https://www.wolframalpha.com/input?i={searchTerms}"; } ];
iconURL = "https://www.wolframalpha.com/_next/static/images/favicon_1zbE9hjk.ico"; iconMapObj."16" = "https://www.wolframalpha.com/_next/static/images/favicon_1zbE9hjk.ico";
definedAliases = [ "@wa" ]; definedAliases = [ "@wa" ];
}; };
"Reddit" = { reddit = {
name = "Reddit";
urls = [ { template = "https://www.reddit.com/search/?q={searchTerms}"; } ]; urls = [ { template = "https://www.reddit.com/search/?q={searchTerms}"; } ];
iconURL = "https://www.reddit.com/favicon.ico"; iconMapObj."16" = "https://www.reddit.com/favicon.ico";
definedAliases = [ "@r" ]; definedAliases = [ "@r" ];
}; };
}; };
@ -191,13 +212,12 @@ in
id = 0; id = 0;
settings = commonSettings; settings = commonSettings;
search = commonSearch; search = commonSearch;
extensions = commonExtensions; extensions.packages = commonExtensions;
}; };
work = { work = {
id = 1; id = 1;
settings = commonSettings; settings = commonSettings;
search = commonSearch; extensions.packages =
extensions =
commonExtensions commonExtensions
++ (with firefox-addons; [ ++ (with firefox-addons; [
bitwarden bitwarden

View file

@ -26,7 +26,7 @@ let
pdf = [ "re.sonny.Junction.desktop" ] ++ browsers; pdf = [ "re.sonny.Junction.desktop" ] ++ browsers;
ebook = [ "com.github.johnfactotum.Foliate.desktop" ]; ebook = [ "com.github.johnfactotum.Foliate.desktop" ];
magnet = [ "transmission-gtk.desktop" ]; magnet = [ "transmission-gtk.desktop" ];
signal = [ "signal-desktop.desktop" ]; signal = [ "signal.desktop" ];
}; };
mimeMap = { mimeMap = {
@ -89,7 +89,7 @@ let
pdf = [ "application/pdf" ]; pdf = [ "application/pdf" ];
ebook = [ "application/epub+zip" ]; ebook = [ "application/epub+zip" ];
magnet = [ "x-scheme-handler/magnet" ]; magnet = [ "x-scheme-handler/magnet" ];
signal = [ "signal-desktop.desktop" ]; signal = [ "signal.desktop" ];
}; };
associations = associations =

View file

@ -26,9 +26,9 @@
sshKeys = [ "3C48489F3B0FBB44E72180D4B1D7541C201C9987" ]; sshKeys = [ "3C48489F3B0FBB44E72180D4B1D7541C201C9987" ];
defaultCacheTtl = 600; defaultCacheTtl = 600;
defaultCacheTtlSsh = 600; defaultCacheTtlSsh = 600;
pinentryPackage = pkgs.pinentry-curses; pinentry.package = pkgs.pinentry-curses;
}; };
programs.zsh.initExtra = '' programs.zsh.initContent = ''
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh
''; '';
@ -38,11 +38,5 @@
programs.git.defaultProfile = "private"; programs.git.defaultProfile = "private";
xdg.configFile."nixpkgs/config.nix".text = '' home.stateVersion = "25.05";
{
allowUnfree = true;
}
'';
home.stateVersion = "24.11";
} }

View file

@ -28,9 +28,9 @@ with pkgs;
sshKeys = [ "8A6213DCDAF86BD3A63549FCFDF71B2C92DAE02C" ]; sshKeys = [ "8A6213DCDAF86BD3A63549FCFDF71B2C92DAE02C" ];
defaultCacheTtl = 600; defaultCacheTtl = 600;
defaultCacheTtlSsh = 600; defaultCacheTtlSsh = 600;
pinentryPackage = pkgs.pinentry-gnome3; pinentry.package = pkgs.pinentry-gnome3;
}; };
programs.zsh.initExtra = '' programs.zsh.initContent = ''
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh
''; '';
@ -40,12 +40,6 @@ with pkgs;
defaultProfile = "work"; defaultProfile = "work";
}; };
xdg.configFile."nixpkgs/config.nix".text = ''
{
allowUnfree = true;
}
'';
home.packages = with pkgs; [ home.packages = with pkgs; [
fh fh
@ -75,5 +69,5 @@ with pkgs;
emblem emblem
]; ];
home.stateVersion = "24.11"; home.stateVersion = "25.05";
} }

View file

@ -28,9 +28,9 @@
]; ];
defaultCacheTtl = 600; defaultCacheTtl = 600;
defaultCacheTtlSsh = 600; defaultCacheTtlSsh = 600;
pinentryPackage = pkgs.pinentry-gnome3; pinentry.package = pkgs.pinentry-gnome3;
}; };
programs.zsh.initExtra = '' programs.zsh.initContent = ''
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh
''; '';
@ -38,12 +38,6 @@
programs.git.defaultProfile = "private"; programs.git.defaultProfile = "private";
xdg.configFile."nixpkgs/config.nix".text = ''
{
allowUnfree = true;
}
'';
home.packages = with pkgs; [ home.packages = with pkgs; [
# system # system
gparted gparted
@ -56,9 +50,6 @@
tabbed tabbed
curtail curtail
# work
teams-for-linux
# dev & admin # dev & admin
pods pods
# gaphor # gaphor
@ -82,11 +73,10 @@
raider raider
gnome-obfuscate gnome-obfuscate
yubikey-manager yubikey-manager
yubikey-manager-qt yubioath-flutter
# yubioath-flutter # TODO conflicts with fluffychat
magic-wormhole-rs magic-wormhole-rs
warp localsend
# onionshare-gui onionshare-gui
transmission_4-gtk transmission_4-gtk
unstable.qbittorrent unstable.qbittorrent
fragments fragments
@ -100,5 +90,5 @@
emblem emblem
]; ];
home.stateVersion = "24.11"; home.stateVersion = "25.05";
} }

View file

@ -1,24 +1,38 @@
{ {
self, self,
inputs, inputs,
pkgs, lib,
... ...
}: }:
let let
createHomeConfig = mkHomeConfiguration =
name: args:
inputs.home-manager.lib.homeManagerConfiguration (
{ {
inherit pkgs; user,
system,
modules,
}:
inputs.home-manager.lib.homeManagerConfiguration {
pkgs = self.pkgsFor system;
extraSpecialArgs = { inherit inputs; }; extraSpecialArgs = { inherit inputs; };
modules =
(with self.homeModules; [ nixpkgs ])
++ [
{
home.username = user;
home.homeDirectory = "/home/${user}";
} }
// args ]
); ++ modules;
};
in in
{ {
imports = [ inputs.home-manager.flakeModules.home-manager ];
flake = { flake = {
homeModules = { homeModules = {
nixpkgs = import ./modules/nixpkgs.nix;
git = import ./modules/git.nix; git = import ./modules/git.nix;
firefox = import ./modules/firefox/firefox.nix; firefox = import ./modules/firefox/firefox.nix;
tor-browser = import ./modules/firefox/tor-browser.nix; tor-browser = import ./modules/firefox/tor-browser.nix;
@ -30,26 +44,31 @@ in
felschr-work = import ./felschr-work.nix; felschr-work = import ./felschr-work.nix;
}; };
homeConfigurations = { homeConfigurations = {
felschr = createHomeConfig { felschr = mkHomeConfiguration {
user = "felschr";
system = "x86_64-linux";
modules = [ modules = [
self.homeModules.git self.homeModules.git
self.homeModules.felschr self.homeModules.felschr
]; ];
}; };
felschr-server = createHomeConfig { felschr-server = mkHomeConfiguration {
user = "felschr";
system = "x86_64-linux";
modules = [ modules = [
self.homeModules.git self.homeModules.git
self.homeModules.felschr-server self.homeModules.felschr-server
]; ];
}; };
felschr-work = createHomeConfig { felschr-work = mkHomeConfiguration {
user = "felschr";
system = "x86_64-linux";
modules = [ modules = [
self.homeModules.git self.homeModules.git
self.homeModules.felschr-work self.homeModules.felschr-work
]; ];
}; };
}; };
# HINT alias for deprecated output homeManagerModules = lib.warn "`homeManagerModules` is deprecated. Use `homeModules` instead." self.homeModules;
homeManagerModules = self.homeModules;
}; };
} }

11
home/modules/nixpkgs.nix Normal file
View file

@ -0,0 +1,11 @@
_:
{
nixpkgs.config.allowUnfree = true;
xdg.configFile."nixpkgs/config.nix".text = ''
{
allowUnfree = true;
}
'';
}

View file

@ -4,6 +4,7 @@
programs.zellij.enable = true; programs.zellij.enable = true;
programs.zellij.package = pkgs.unstable.zellij; programs.zellij.package = pkgs.unstable.zellij;
programs.zellij.enableZshIntegration = true; programs.zellij.enableZshIntegration = true;
programs.zellij.exitShellOnExit = true;
programs.zellij.settings = { programs.zellij.settings = {
default_layout = "compact"; # or default default_layout = "compact"; # or default
default_mode = "normal"; default_mode = "normal";
@ -17,8 +18,4 @@
strider.path = "strider"; strider.path = "strider";
}; };
}; };
home.sessionVariables = {
ZELLIJ_AUTO_EXIT = "true";
};
} }

View file

@ -29,7 +29,7 @@ in
file = "share/zsh-history-substring-search/zsh-history-substring-search.zsh"; file = "share/zsh-history-substring-search/zsh-history-substring-search.zsh";
} }
]; ];
initExtra = '' initContent = ''
export KEYTIMEOUT=1 export KEYTIMEOUT=1
ZSH_AUTOSUGGEST_USE_ASYNC=1 ZSH_AUTOSUGGEST_USE_ASYNC=1

View file

@ -4,7 +4,7 @@
home.packages = with pkgs; [ home.packages = with pkgs; [
signal-desktop signal-desktop
(makeAutostartItem { (makeAutostartItem {
name = "signal-desktop"; name = "signal";
package = signal-desktop; package = signal-desktop;
prependExtraArgs = [ "--start-in-tray" ]; prependExtraArgs = [ "--start-in-tray" ];
}) })

View file

@ -22,8 +22,6 @@
../../services/open-webui.nix ../../services/open-webui.nix
]; ];
nixpkgs.config.allowUnfree = true;
boot.loader.systemd-boot.memtest86.enable = true; boot.loader.systemd-boot.memtest86.enable = true;
# running binaries for other architectures # running binaries for other architectures

View file

@ -50,8 +50,6 @@ in
age.secrets.cloudflare.file = ../../secrets/cloudflare.age; age.secrets.cloudflare.file = ../../secrets/cloudflare.age;
age.secrets.hostKey.file = ../../secrets/home-server/hostKey.age; age.secrets.hostKey.file = ../../secrets/home-server/hostKey.age;
nixpkgs.config.allowUnfree = true;
networking.domain = "home.felschr.com"; networking.domain = "home.felschr.com";
networking.firewall.allowedTCPPorts = [ networking.firewall.allowedTCPPorts = [

View file

@ -1,14 +0,0 @@
{ inputs, ... }:
{
flake = {
overlays.default = final: prev: {
unstable = import inputs.nixpkgs-unstable {
inherit (prev) system;
config.allowUnfree = true;
};
inherit (inputs.self.packages.${prev.system}) deconz brlaser;
vimPlugins = prev.vimPlugins // final.callPackage ./pkgs/vim-plugins { inherit inputs; };
};
};
}

27
overlays/flake-module.nix Normal file
View file

@ -0,0 +1,27 @@
{ self, inputs, ... }:
{
flake = {
overlays.default = final: prev: {
unstable = import inputs.nixpkgs-unstable {
inherit (prev) system;
config.allowUnfree = true;
};
inherit (inputs.self.packages.${prev.system}) deconz;
vimPlugins = prev.vimPlugins // final.callPackage ../pkgs/vim-plugins { inherit inputs; };
};
pkgsFor =
system:
import inputs.nixpkgs {
inherit system;
overlays = [ self.overlays.default ];
config.allowUnfree = true;
};
};
perSystem =
{ system, ... }:
{
_module.args.pkgs = self.pkgsFor system;
};
}

View file

@ -1,119 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
cmake,
zlib,
cups,
...
}:
# maintained fork of brlaser with newer drivers (including Brother HL-L2370DN)
stdenv.mkDerivation (finalAttrs: {
pname = "brlaser";
version = "6.2.6";
src = fetchFromGitHub {
owner = "Owl-Maintain";
repo = "brlaser";
rev = "v${finalAttrs.version}";
hash = "sha256-+W84s3Nulj0kz2h1WE7/QGysVylKkN/xNqcNvrQz6D8=";
};
nativeBuildInputs = [ cmake ];
buildInputs = [
zlib
cups
];
cmakeFlags = [
"-DCUPS_SERVER_BIN=lib/cups"
"-DCUPS_DATA_DIR=share/cups"
];
meta = with lib; {
description = "A CUPS driver for Brother laser printers";
longDescription = ''
While most Brother printers can use standard printer languages like PCL or PostScript, some models do not. If you have a monochrome Brother laser printer (or multi-function device) and the other open-source drivers are not working, brlaser might be able to help. Additionally, there have been reports of some non-Brother printers working with this driver.
The following printers have been reported to work with this driver:
Brother DCP-1510 series
Brother DCP-1600 series
Brother DCP-1610W series
Brother DCP-7020
Brother DCP-7030
Brother DCP-7040
Brother DCP-7055
Brother DCP-7055W
Brother DCP-7060D
Brother DCP-7065DN
Brother DCP-7070DW
Brother DCP-7080
Brother DCP-7080D
Brother DCP-8065DN
Brother DCP-L2500D series
Brother DCP-L2510D series
Brother DCP-L2520D series
Brother DCP-L2520DW series
Brother DCP-L2537DW
Brother DCP-L2540DW series
Brother DCP-L2550DW series
Brother FAX-2820
Brother FAX-2840
Brother HL-1110 series
Brother HL-1200 series
Brother HL-2030 series
Brother HL-2130 series
Brother HL-2140 series
Brother HL-2220 series
Brother HL-2230 series
Brother HL-2240D series
Brother HL-2250DN series
Brother HL-2260
Brother HL-2270DW series
Brother HL-2280DW
Brother HL-5030 series
Brother HL-5040 series
Brother HL-L2300D series
Brother HL-L2305 series
Brother HL-L2310D series
Brother HL-L2320D series
Brother HL-L2335D series
Brother HL-L2340D series
Brother HL-L2350DW series
Brother HL-L2360D series
Brother HL-L2370DN series
Brother HL-L2375DW series
Brother HL-L2380DW series
Brother HL-L2390DW
Brother HL-L5000D series
Brother MFC-1810 series
Brother MFC-1910W series
Brother MFC-7240
Brother MFC-7320
Brother MFC-7340
Brother MFC-7360N
Brother MFC-7365DN
Brother MFC-7420
Brother MFC-7440N
Brother MFC-7460DN
Brother MFC-7860DW
Brother MFC-8710DW
Brother MFC-8860DN
Brother MFC-9160
Brother MFC-L2700DN series
Brother MFC-L2700DW series
Brother MFC-L2710DN series
Brother MFC-L2710DW series
Brother MFC-L2750DW series
Fuji Xerox DocuPrint P265 dw
Lenovo LJ2650DN
'';
homepage = "https://github.com/Owl-Maintain/brlaser";
license = licenses.gpl2;
platforms = platforms.linux;
maintainers = with maintainers; [ felschr ];
changelog = "https://github.com/Owl-Maintain/brlaser/releases/tag/${finalAttrs.src.rStijnDWev}";
};
})

View file

@ -4,7 +4,6 @@
{ self', pkgs, ... }: { self', pkgs, ... }:
{ {
packages = { packages = {
brlaser = pkgs.callPackage ./brlaser { };
deconz = pkgs.qt5.callPackage ./deconz { }; deconz = pkgs.qt5.callPackage ./deconz { };
}; };

View file

@ -1,21 +1,39 @@
#! /usr/bin/env nix-shell #! /usr/bin/env bash
#! nix-shell -i bash -p bash gnupg
# shellcheck shell=bash # shellcheck shell=bash
set -euo pipefail set -euo pipefail
EMAIL=$0 read -rp 'enter email address: ' email
# create master key echo "$email"
gpg2 --quick-gen-key "Felix Schröter <$EMAIL>" ed25519 sign 1y
# create main key
gpg2 --quick-gen-key "Felix Schröter <$email>" ed25519 sign 1y || true
keyid=$(gpg2 --list-keys --with-colons "$email" | grep "^pub:" | cut -d: -f5)
fpr=$(gpg2 --list-keys --with-colons "$email" | grep "^fpr:" | cut -d: -f10)
# create subkeys # create subkeys
gpg2 --quick-add-key KEYID cv25519 encr 1y gpg2 --quick-add-key "$fpr" cv25519 encr 1y
gpg2 --quick-add-key KEYID ed25519 auth 1y gpg2 --quick-add-key "$fpr" ed25519 auth 1y
gpg2 --quick-add-key KEYID ed25519 sign 1y gpg2 --quick-add-key "$fpr" ed25519 sign 1y
# for signing git commits use the sign subkey echo "created keys:"
# and add the public sign subkey to GitHub/GitLab gpg2 --list-keys --with-subkey-fingerprint "$keyid"
# show info sign=$(gpg2 --list-keys --with-colons "$email" | grep "::s::" -A 1)
gpg2 --list-keys --with-subkey-fingerprint sign_keyid=$(echo "$sign" | grep "^sub:" | cut -d: -f5)
auth=$(gpg2 --list-keys --with-colons "$email" | grep "::a::" -A 1)
auth_keyid=$(echo "$auth" | grep "^sub:" | cut -d: -f5)
pub_sign=$(gpg2 --armor --export "$sign_keyid!")
pub_ssh=$(gpg2 --export-ssh-key "$auth_keyid")
echo "public PGP key with signing subkey:"
echo "$pub_sign"
echo ""
echo "public SSH key for authenticating with git forges:"
echo "$pub_ssh"
echo ""

View file

@ -100,8 +100,7 @@ in
settings = { settings = {
theme = "dark"; theme = "dark";
server = { server = {
host = "::1"; address = "tcp://[::1]:${toString port}";
inherit port;
}; };
default_2fa_method = "webauthn"; default_2fa_method = "webauthn";
default_redirection_url = "https://${domain}"; default_redirection_url = "https://${domain}";

View file

@ -6,7 +6,7 @@
noto-fonts-extra noto-fonts-extra
noto-fonts-cjk-sans noto-fonts-cjk-sans
noto-fonts-emoji noto-fonts-emoji
(nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; }) nerd-fonts.symbols-only
fira-code fira-code
]; ];
fonts.fontconfig.defaultFonts = { fonts.fontconfig.defaultFonts = {

View file

@ -4,6 +4,8 @@ let
inherit (inputs.self.outputs) nixConfig; inherit (inputs.self.outputs) nixConfig;
in in
{ {
nixpkgs.config.allowUnfree = true;
nix.gc = { nix.gc = {
automatic = true; automatic = true;
dates = "04:00"; dates = "04:00";

View file

@ -6,8 +6,8 @@
}: }:
{ {
hardware.pulseaudio.enable = false;
security.rtkit.enable = true; security.rtkit.enable = true;
services.pulseaudio.enable = false;
services.pipewire = { services.pipewire = {
enable = true; enable = true;
alsa.enable = true; alsa.enable = true;