diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 1c973402..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: "Test" -on: - pull_request: - push: -jobs: - builds: - name: Build configuration for ${{ matrix.host }} - runs-on: ubuntu-latest - strategy: - matrix: - host: - - delly-nixos - - nixos - - tux-nixos - steps: - - uses: actions/checkout@v2.3.4 - with: - fetch-depth: 0 # Nix Flakes doesn't work on shallow clones - - uses: cachix/install-nix-action@v13 - with: - install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-3.0pre20200820_4d77513/install - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v10 - with: - name: nobbz - signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' - - run: nix build .#nixosConfigurations.${{ matrix.host }}.config.system.build.toplevel -L diff --git a/.gitignore b/.gitignore index 82e0cdf0..d6944e3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/result \ No newline at end of file +/result* diff --git a/home/LICENSE b/LICENSE similarity index 100% rename from home/LICENSE rename to LICENSE diff --git a/apps/switch/default.nix b/apps/switch/default.nix new file mode 100644 index 00000000..76136501 --- /dev/null +++ b/apps/switch/default.nix @@ -0,0 +1,39 @@ +{ + self, + unstable, + ... +}: let + pkgs = unstable.legacyPackages.x86_64-linux; + type = "app"; + program = "${switch}/bin/switch"; + + nixosConfigs = pkgs.writeText "nixosConfigs" '' + ${__toJSON (__attrNames self.nixosConfigurations)} + ''; + + homeConfigs = pkgs.writeText "homeConfigs" '' + ${__toJSON (__attrNames self.homeConfigurations)} + ''; + + switch = pkgs.stdenv.mkDerivation { + pname = "nobbz-flake-switcher"; + version = "0.0.1"; + + buildInputs = [self.packages.x86_64-linux.zx]; + + src = ./.; + + installPhase = '' + mkdir -p $out/{bin,lib} + + cat < $out/bin/switch + #!${pkgs.bash}/bin/bash + + exec $out/lib/switch.mjs --nixos ${nixosConfigs} --home ${homeConfigs} "\$@" + EOF + chmod ugo=rx $out/bin/switch + + install --mode=555 switch.mjs $out/lib/switch.mjs + ''; + }; +in {inherit type program;} diff --git a/apps/switch/switch.mjs b/apps/switch/switch.mjs new file mode 100644 index 00000000..a6602e2c --- /dev/null +++ b/apps/switch/switch.mjs @@ -0,0 +1,52 @@ +#!/usr/bin/env zx + +const info = (line) => console.log(chalk.yellow(line)); + +const trim = (str) => str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + +console.log(process.argv.slice(2)) + +console.log(argv) + +info("loading nixos names") + +const nixosConfigs = JSON.parse(await fs.readFile(argv.nixos)) + +info("loading home manager names") + +const homeConfigs = JSON.parse(await fs.readFile(argv.home)) + +info("reading hostname"); + +const hostName = (await fs.readFile("/etc/hostname", "utf8")).trim() + +info("reading user"); + +const user = process.env.USER.trim(); + +info("finished reading inputs") + +const targets = [ + `.#nixos/config/${hostName}`, + `.#home/config/${user}@${hostName}`, +] + +await $`nix build --keep-going --log-format bar-with-logs -v ${targets}` + +await fs.readdir('.') + .then(dirs => Promise.all(dirs + .filter(name => name.startsWith('result')) + .map(async link => { + const activate = `./${link}/bin/home-manager-generation`; + + await fs.stat(activate) + .then(() => $`${activate}`) + .catch(() => {}) + }))) + +await $`sudo nixos-rebuild switch --flake .#${hostName}` + +await fs.readdir('.') + .then(dirs => Promise.all(dirs + .filter(name => name.startsWith('result')) + .map(async link => await $`rm ${link}`))) diff --git a/apps/update/default.nix b/apps/update/default.nix new file mode 100644 index 00000000..84946ea2 --- /dev/null +++ b/apps/update/default.nix @@ -0,0 +1,31 @@ +{ + self, + unstable, + ... +}: let + pkgs = unstable.legacyPackages.x86_64-linux; + type = "app"; + program = "${update}/bin/update"; + + update = pkgs.stdenv.mkDerivation { + pname = "nobbz-flake-updater"; + version = "0.0.1"; + + buildInputs = [self.packages.x86_64-linux.zx]; + + src = ./.; + + installPhase = '' + mkdir -p $out/{bin,lib} + + cat < $out/bin/update + #!${pkgs.bash}/bin/bash + + exec $out/lib/update.mjs + EOF + chmod ugo=rx $out/bin/update + + install --mode=555 update.mjs $out/lib/update.mjs + ''; + }; +in {inherit type program;} diff --git a/apps/update/update.mjs b/apps/update/update.mjs new file mode 100644 index 00000000..601d063f --- /dev/null +++ b/apps/update/update.mjs @@ -0,0 +1,3 @@ +#!/usr/bin/env zx + +await $`nix flake update --commit-lock-file` \ No newline at end of file diff --git a/flake.lock b/flake.lock index 6eb7cca4..0a3a500e 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,32 @@ { "nodes": { + "alejandra": { + "inputs": { + "flakeCompat": "flakeCompat", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1646937181, + "narHash": "sha256-vkFKYnSmhPPXtc3AH7iRtqRRqxhj0o5WySqPT+klDWU=", + "owner": "kamadorueda", + "repo": "alejandra", + "rev": "b75302002c94a158faebf5fca9e0d72f2ca59f4d", + "type": "github" + }, + "original": { + "owner": "kamadorueda", + "ref": "1.1.0", + "repo": "alejandra", + "type": "github" + } + }, "emacs": { "locked": { - "lastModified": 1627579950, - "narHash": "sha256-MUbgLOeNjgTUVxzVWZ4Gjek2PlgC4r206PgVkNslrmY=", + "lastModified": 1647767419, + "narHash": "sha256-6+gMxEV7yAO/NoTCc4srlOsfgAg/rYn78GtlSWv+eFg=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "de00abcd9631b104ef2868e1e0a877b1ec6b5633", + "rev": "b225ddeb7bdc17b844ce5f3c33d57d196e972143", "type": "github" }, "original": { @@ -15,13 +35,35 @@ "type": "github" } }, + "fenix": { + "inputs": { + "nixpkgs": [ + "statix", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1645251813, + "narHash": "sha256-cQ66tGjnZclBCS3nD26mZ5fUH+3/HnysGffBiWXUSHk=", + "owner": "nix-community", + "repo": "fenix", + "rev": "9892337b588c38ec59466a1c89befce464aae7f8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-utils": { "locked": { - "lastModified": 1623875721, - "narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "f7e004a55b120c02ecb6219596820fcd32ca8772", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -30,6 +72,43 @@ "type": "github" } }, + "flakeCompat": { + "flake": false, + "locked": { + "lastModified": 1641205782, + "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "statix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1635165013, + "narHash": "sha256-o/BdVjNwcB6jOmzZjOH703BesSkkS5O7ej3xhyO8hAY=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "5b9e0ff9d3b551234b4f3eb3983744fa354b17f1", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -37,11 +116,11 @@ ] }, "locked": { - "lastModified": 1627592512, - "narHash": "sha256-+bauwACGl+/dTQB047XImRz5P6Lp6vxl5ruiKjtENxo=", + "lastModified": 1647755261, + "narHash": "sha256-qsrPnMlonGNIKskMqD5p1HG1HhBaZXUi3ta7l2Wtb4Q=", "owner": "nix-community", "repo": "home-manager", - "rev": "7f976da06840c268cc291a021bab7532b923713c", + "rev": "0fad959df8076766d4259c1f76750f892a0cafa1", "type": "github" }, "original": { @@ -53,27 +132,26 @@ "lowdown-src": { "flake": false, "locked": { - "lastModified": 1617481909, - "narHash": "sha256-SqnfOFuLuVRRNeVJr1yeEPJue/qWoCp5N6o5Kr///p4=", + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", "owner": "kristapsdz", "repo": "lowdown", - "rev": "148f9b2f586c41b7e36e73009db43ea68c7a1a4d", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", "type": "github" }, "original": { "owner": "kristapsdz", - "ref": "VERSION_0_8_4", "repo": "lowdown", "type": "github" } }, "master": { "locked": { - "lastModified": 1627627671, - "narHash": "sha256-h0aJ/9oCKHYrSZFmu2vamAlCaxCWjxlul894JloeAa0=", + "lastModified": 1647769794, + "narHash": "sha256-6mRHWJ5YttzxAGa85l6w2sz8hiJLzEpfDX9FSs0V1tE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e8d67ac8fc5294a32fd257c757548d9cb0f81190", + "rev": "ddb2d450a5659612cda6976d1564551c78148907", "type": "github" }, "original": { @@ -83,33 +161,136 @@ "type": "github" } }, + "naersk": { + "inputs": { + "nixpkgs": [ + "rnix-lsp", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1639947939, + "narHash": "sha256-pGsM8haJadVP80GFq4xhnSpNitYNQpaXk4cnA796Cso=", + "owner": "nix-community", + "repo": "naersk", + "rev": "2fc8ce9d3c025d59fee349c1f80be9785049d653", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "naersk", + "type": "github" + } + }, "nix": { "inputs": { "lowdown-src": "lowdown-src", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2", + "nixpkgs-regression": "nixpkgs-regression" }, "locked": { - "lastModified": 1627505905, - "narHash": "sha256-B6fop0p49C+ELrQkdPhClaxIKcVR6JBRY7qPUy+QvxQ=", + "lastModified": 1647617792, + "narHash": "sha256-UpLDpu4kcyas0GVRkrBdLNEPWmQHijjq+5BSk470YD4=", "owner": "nixos", "repo": "nix", - "rev": "48e35585a6f23b05647cef12bcc85eeab3ae1d59", + "rev": "8ad485ea893862029e02cb560a15fd276753b04f", "type": "github" }, "original": { "owner": "nixos", - "ref": "master", "repo": "nix", "type": "github" } }, + "nixos-vscode-server": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1631782689, + "narHash": "sha256-/E2kuaU7IPtF2Wf1wWazjWmhmKyfpr/7h6gXZ1UCVY0=", + "owner": "mudrii", + "repo": "nixos-vscode-ssh-fix", + "rev": "b7886e9c046d52a1be8e907a8bdb182b60677acb", + "type": "github" + }, + "original": { + "owner": "mudrii", + "ref": "main", + "repo": "nixos-vscode-ssh-fix", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1624862269, - "narHash": "sha256-JFcsh2+7QtfKdJFoPibLFPLgIW6Ycnv8Bts9a7RYme0=", + "lastModified": 1646506091, + "narHash": "sha256-sWNAJE2m+HOh1jtXlHcnhxsj6/sXrHgbqVNcVRlveK4=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "3e644bd62489b516292c816f70bf0052c693b3c7", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2105": { + "locked": { + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-21.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111": { + "locked": { + "lastModified": 1647490331, + "narHash": "sha256-Jcc+vHNDN3KDWuzGNTl3A24ICGovPneJDejiN2t57QI=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2c66a7a6e036971c4847cca424125f55b9eb0b0b", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-21.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-regression": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f77036342e2b690c61c97202bf48f2ce13acc022", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", "type": "github" }, "original": { @@ -118,57 +299,121 @@ "type": "indirect" } }, - "nixpkgs-2009": { + "nixpkgs_3": { "locked": { - "lastModified": 1625876282, - "narHash": "sha256-z/Gv+11Uzdv3HcQCY+xGi1+iuc3rmCaPzxxDSMnuRAI=", + "lastModified": 1626395775, + "narHash": "sha256-7Uo+4PIQGirfd7WfFuRuspLCyDT7eUn6pnJx/CL9UC8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "068984c00e0d4e54b6684d98f6ac47c92dcb642e", + "rev": "a165aeceda9f9741d15bc2488425daeb06c0707e", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-20.09", + "ref": "nixos-21.05", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs-2105": { + "nixpkgs_4": { "locked": { - "lastModified": 1627528535, - "narHash": "sha256-+E0LxCLav1GmbQbqwCKP39DRMn6NeEq00drC8udnYIY=", + "lastModified": 1645013224, + "narHash": "sha256-b7OEC8vwzJv3rsz9pwnTX2LQDkeOWz2DbKypkVvNHXc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2262d7863a6af007274a698367484bf4903a3299", + "rev": "b66b39216b1fef2d8c33cc7a5c72d8da80b79970", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-21.05", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, + "rnix-lsp": { + "inputs": { + "naersk": "naersk", + "nixpkgs": [ + "unstable" + ], + "utils": "utils" + }, + "locked": { + "lastModified": 1647240246, + "narHash": "sha256-/MLdBWfFUN1C1eNVBYfaVAIcDiZKXpWEbzBC2pqVXj0=", + "owner": "nix-community", + "repo": "rnix-lsp", + "rev": "4d1024ccfe1bc569811769d1ef52a2fc6c1d482d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "rnix-lsp", + "type": "github" + } + }, "root": { "inputs": { + "alejandra": "alejandra", "emacs": "emacs", "flake-utils": "flake-utils", "home-manager": "home-manager", "master": "master", "nix": "nix", - "nixpkgs-2009": "nixpkgs-2009", + "nixos-vscode-server": "nixos-vscode-server", "nixpkgs-2105": "nixpkgs-2105", + "nixpkgs-2111": "nixpkgs-2111", + "rnix-lsp": "rnix-lsp", + "statix": "statix", "unstable": "unstable" } }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1645205556, + "narHash": "sha256-e4lZW3qRyOEJ+vLKFQP7m2Dxh5P44NrnekZYLxlucww=", + "owner": "rust-analyzer", + "repo": "rust-analyzer", + "rev": "acf5874b39f3dc5262317a6074d9fc7285081161", + "type": "github" + }, + "original": { + "owner": "rust-analyzer", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "statix": { + "inputs": { + "fenix": "fenix", + "gitignore": "gitignore", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1645337357, + "narHash": "sha256-tAhWlvSh2ANWckdxYbNiYNk67dc3VliintqA2pwmsck=", + "owner": "nerdypepper", + "repo": "statix", + "rev": "448e6f2096b855bee1464c514dfb73477fb39774", + "type": "github" + }, + "original": { + "owner": "nerdypepper", + "repo": "statix", + "type": "github" + } + }, "unstable": { "locked": { - "lastModified": 1627391865, - "narHash": "sha256-tPoWBO9Nzu3wuX37WcnctzL6LoDCErJLnfLGqqmXCm4=", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", "owner": "nixos", "repo": "nixpkgs", - "rev": "8ecc61c91a596df7d3293603a9c2384190c1b89a", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", "type": "github" }, "original": { @@ -177,6 +422,21 @@ "repo": "nixpkgs", "type": "github" } + }, + "utils": { + "locked": { + "lastModified": 1638122382, + "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index a84d43f1..cefc7dbc 100644 --- a/flake.nix +++ b/flake.nix @@ -1,10 +1,13 @@ { - inputs.nixpkgs-2009.url = "github:nixos/nixpkgs/nixos-20.09"; inputs.nixpkgs-2105.url = "github:nixos/nixpkgs/nixos-21.05"; + inputs.nixpkgs-2111.url = "github:nixos/nixpkgs/nixos-21.11"; inputs.unstable.url = "github:nixos/nixpkgs/nixos-unstable"; inputs.master.url = "github:nixos/nixpkgs/master"; - inputs.nix.url = "github:nixos/nix/master"; + inputs.nix.url = "github:nixos/nix"; #/caf51729450d4c57d48ddbef8e855e9bf65f8792"; + inputs.rnix-lsp.url = "github:nix-community/rnix-lsp/master"; + inputs.rnix-lsp.inputs.nixpkgs.follows = "unstable"; + # inputs.rnix-lsp.inputs.naersk.inputs.nixpkgs.follows = "unstable"; inputs.home-manager.url = "github:nix-community/home-manager"; inputs.home-manager.inputs.nixpkgs.follows = "unstable"; @@ -14,76 +17,42 @@ inputs.emacs.url = "github:nix-community/emacs-overlay"; inputs.emacs.inputs.nixpkgs.follows = "master"; - outputs = { self, nixpkgs-2009, nixpkgs-2105, unstable, flake-utils, emacs, ... }@inputs: - let - pkgs = nixpkgs-2009.legacyPackages.x86_64-linux; - upkgs = unstable.legacyPackages.x86_64-linux; - mpkgs = inputs.master.legacyPackages.x86_64-linux; - epkgs = import unstable { system = "x86_64-linux"; overlays = [ self.overlays.emacs ]; }; - nixos = pkgs.lib.attrsets.mapAttrs' - (k: v: { - name = "nixos/configs/${k}"; - value = v.config.system.build.toplevel; - }) - self.nixosConfigurations; - home = pkgs.lib.attrsets.mapAttrs' - (k: v: { - name = "home/configs/${k}"; - value = v.activationPackage; - }) - self.homeConfigurations; - in - { - devShell.x86_64-linux = - nixpkgs-2105.legacyPackages.x86_64-linux.callPackage - ./packages/devShell.nix - { }; + inputs.nixos-vscode-server.url = "github:mudrii/nixos-vscode-ssh-fix/main"; - nixosModules = import ./nixos/modules; - nixosConfigurations = import ./nixos/hosts inputs; + inputs.statix.url = "github:nerdypepper/statix"; + inputs.alejandra.url = "github:kamadorueda/alejandra/1.1.0"; - homeModules = import ./home/modules pkgs.lib; - homeConfigurations = { - tux-nixos = self.lib.mkHomeConfig "nmelzer" ./home/hosts/tux-nixos.nix; - delly-nixos = self.lib.mkHomeConfig "nmelzer" ./home/hosts/delly-nixos.nix; - nixos = self.lib.mkHomeConfig "demo" ./home/hosts/nixos.nix; - WS0005 = self.lib.mkHomeConfig "WS0005" ./home/hosts/WS0005.nix; - }; + outputs = {self, ...} @ inputs: { + nixosModules = import ./nixos/modules inputs; + nixosConfigurations = import ./nixos/configurations inputs; - overlay = import ./home/nix/myOverlay; + homeModules = import ./home/modules inputs; + homeConfigurations = import ./home/configurations inputs; - overlays = { - inputs = final: prev: { inherit inputs; }; - emacs = emacs.overlay; - self = self.overlay; - }; + packages.x86_64-linux = + (import ./packages inputs) + // self.lib.nixosConfigurationsAsPackages.x86_64-linux + // self.lib.homeConfigurationsAsPackages.x86_64-linux; - packages.x86_64-linux = { - advcp = upkgs.callPackage ./home/packages/advcp { }; - elixir-lsp = upkgs.beam.packages.erlang.callPackage ./home/packages/elixir-lsp { - rebar3 = pkgs.beam.packages.erlang.rebar3; - }; - erlang-ls = upkgs.beam.packages.erlang.callPackage ./home/packages/erlang-ls { }; - keyleds = upkgs.callPackage ./home/packages/keyleds { - stdenv = upkgs.gcc8Stdenv; - }; - rofi-unicode = upkgs.callPackage ./home/packages/rofi-unicode { }; - dracula-konsole = upkgs.callPackage ./home/packages/dracula/konsole.nix { }; - gnucash-de = mpkgs.callPackage ./home/packages/gnucash-de { }; - kmymoney-de = upkgs.callPackage ./home/packages/kmymoney-de { }; - emacs = epkgs.emacsGcc; - } // (import ./scripts inputs) - // home - // nixos; + checks = self.packages; - lib = import ./lib inputs; + lib = import ./lib inputs; - checks.x86_64-linux = self.packages.x86_64-linux; - # flake-utils.lib.flattenTree (pkgs.recurseIntoAttrs { inherit nixos; }); + apps.x86_64-linux = { + update = import ./apps/update inputs; + switch = import ./apps/switch inputs; + }; - apps.x86_64-linux = { - build = { type = "app"; program = "${self.packages.x86_64-linux.build-config}/bin/build-config.sh"; }; - switch = { type = "app"; program = "${self.packages.x86_64-linux.switch-config}/bin/switch-config.sh"; }; + devShell.x86_64-linux = self.devShells.x86_64-linux.default; + devShells.x86_64-linux.default = let + pkgs = inputs.unstable.legacyPackages.x86_64-linux; + in + pkgs.mkShell { + packages = [ + inputs.rnix-lsp.defaultPackage.x86_64-linux + inputs.statix.defaultPackage.x86_64-linux + inputs.alejandra.defaultPackage.x86_64-linux + ]; }; - }; + }; } diff --git a/home/.envrc b/home/.envrc deleted file mode 100644 index 181b216b..00000000 --- a/home/.envrc +++ /dev/null @@ -1,14 +0,0 @@ -# -*- mode: shell-script -*- - -use_flake() { - watch_file flake.lock - watch_file {**/,}*.nix - - mkdir -p $(direnv_layout_dir) - - eval "$(nix print-dev-env \ - --profile "$(direnv_layout_dir)/flake-profile" \ - --option builders "")" -} - -use flake diff --git a/home/.github/dependabot.yml b/home/.github/dependabot.yml deleted file mode 100644 index f20780ab..00000000 --- a/home/.github/dependabot.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: 2 -updates: -- package-ecosystem: github-actions - directory: "/" - schedule: - interval: daily - time: "04:00" - open-pull-requests-limit: 10 - reviewers: - - NobbZ - assignees: - - NobbZ - labels: - - CI diff --git a/home/.github/workflows/environments.yml b/home/.github/workflows/environments.yml deleted file mode 100644 index a4f558b6..00000000 --- a/home/.github/workflows/environments.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: "build" - -on: - push: - branches: - - main - pull_request: - -jobs: - overlays: - name: Build package ${{ matrix.package }} - runs-on: ubuntu-latest - strategy: - matrix: - package: - - advcp - - elixir-lsp - - erlang-ls - - emacsGit - - keyleds - - rofi-unicode - - keepass - steps: - - uses: actions/checkout@v2.3.4 - - uses: cachix/install-nix-action@v13 - with: - install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-2.4pre20210207_fd6eaa1/install - extra_nix_config: | - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v10 - with: { name: nobbz, signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' } - - run: nix build -L .#${{ matrix.package }} - - environment: - name: Build for ${{ matrix.hostname }} - needs: overlays - runs-on: ubuntu-latest - strategy: - matrix: - hostname: - - delly-nixos - - nixos - - tux-nixos - - WS0005 - steps: - - uses: actions/checkout@v2.3.4 - with: { fetch-depth: 0 } - - uses: cachix/install-nix-action@v13 - with: - install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-2.4pre20210207_fd6eaa1/install - extra_nix_config: experimental-features = nix-command flakes - - uses: cachix/cachix-action@v10 - with: - name: nobbz - signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}' - skipPush: github.ref != 'refs/heads/main' - - run: nix build -L .#${{ matrix.hostname }} diff --git a/home/.gitignore b/home/.gitignore deleted file mode 100644 index 5f553024..00000000 --- a/home/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/result -/result-* -/hosts/default.nix -/secrets.nix diff --git a/home/.gitlab-ci.yml b/home/.gitlab-ci.yml deleted file mode 100644 index 58472276..00000000 --- a/home/.gitlab-ci.yml +++ /dev/null @@ -1,20 +0,0 @@ -image: nixos/nix:latest - -build: - before_script: - - nix-env -iA nixpkgs.cachix nixpkgs.bash nixpkgs.gnumake - - cachix use nobbz - - cachix use nix-community - - nix path-info --all > /tmp/store-path-pre-build - script: - - | - set -x - for file in hosts/*.nix; do - host=$(basename $file .nix) - make build HOSTNAME=$host - mv result $host.result - ln -s $(pwd)/$host.result /nix/var/nix/gcroots/$host.result - done - nix-collect-garbage --verbose - after_script: - - bash -c "comm -13 <(sort /tmp/store-path-pre-build | grep -v '\.drv$') <(nix path-info --all | grep -v '\.drv$' | sort) | cachix push nobbz" diff --git a/home/README.adoc b/home/README.adoc deleted file mode 100644 index 0c52b750..00000000 --- a/home/README.adoc +++ /dev/null @@ -1,18 +0,0 @@ -= Dotfiles -Norbert Melzer -:toc: macro - -This is just another approach to organize my dotfiles in a repository. - -toc::[] - -== Sources - -There are some old repositories I used to configure stuff. -My actual dotfiles have been private for a long time as they contain secrets. -I will probably never open them. - -Though I configured other programs by other means, as I (re) discover those sources I will add them to the list: - -.Sources for this new dotfile repo -* https://gitlab.com/NobbZ/emacs.d[emacs config] diff --git a/home/configurations/default.nix b/home/configurations/default.nix new file mode 100644 index 00000000..0eb3c720 --- /dev/null +++ b/home/configurations/default.nix @@ -0,0 +1,5 @@ +{self, ...} @ inputs: { + "nmelzer@mimas" = self.lib.mkHome "nmelzer" "mimas" "x86_64-linux" inputs.unstable; + "nmelzer@enceladeus" = self.lib.mkHome "nmelzer" "enceladeus" "x86_64-linux" inputs.unstable; + "demo@thetys" = self.lib.mkHome "demo" "thetys" "x86_64-linux" inputs.unstable; +} diff --git a/home/configurations/demo@thetys.nix b/home/configurations/demo@thetys.nix new file mode 100644 index 00000000..08c5e872 --- /dev/null +++ b/home/configurations/demo@thetys.nix @@ -0,0 +1,97 @@ +{ + self, + nixpkgs-2105, + ... +}: {pkgs, ...}: let + stable = nixpkgs-2105.legacyPackages.x86_64-linux; + self' = self.packages.x86_64-linux; +in { + config = { + nixpkgs.allowedUnfree = ["google-chrome" "vscode"]; + + activeProfiles = ["browsing" "development"]; + + enabledLanguages = ["elixir" "go" "lua" "nix" "python" "terraform" "nim" "rust"]; + + languages.python.useMS = true; + + programs.emacs.splashScreen = false; + programs.emacs.extraPackages = ep: [ep.robot-mode]; + + services = { + gnome-keyring.enable = true; + + restic = { + enable = true; + exclude = + (map + (e: "%h/${e}") + [ + ".cache" + ".cabal" + ".cargo" + ".emacs.d/eln-cache" + ".emacs.d/.cache" + ".gem" + ".gradle" + ".hex" + ".kube" + ".local" + ".m2" + ".minikube" + ".minishift" + ".mix" + ".mozilla" + ".npm" + ".opam" + ".rancher" + ".vscode-oss" + "go/pkg" + "Videos" + "Downloads" + "VirtualBox VMs" + ]) + ++ [ + "_build" + "deps" + "result" + "target" + ".elixir_ls" + "ccls-cache" + ".direnv" + ]; + repo = "rest:http://172.24.152.168:9999/nobbz"; + }; + }; + + home.packages = [ + stable.mysqlWorkbench + self'.gnucash-de + pkgs.vscode + ]; + + systemd.user.services = { + imwheel = { + Unit = { + Description = "IMWheel"; + Wants = ["display-manager.service"]; + After = ["display-manager.service"]; + }; + + Service = { + Type = "simple"; + Environment = ["XAUTHORITY=%h/.Xauthority"]; + ExecStart = "${pkgs.imwheel}/bin/imwheel -d"; + ExecStop = "${pkgs.procps}/bin/pkill imwheel"; + + Restart = "on-failure"; + RestartSec = "10"; + }; + + Install = { + WantedBy = ["graphical-session.target"]; + }; + }; + }; + }; +} diff --git a/home/configurations/nmelzer@enceladeus.nix b/home/configurations/nmelzer@enceladeus.nix new file mode 100644 index 00000000..96120470 --- /dev/null +++ b/home/configurations/nmelzer@enceladeus.nix @@ -0,0 +1,34 @@ +{statix, ...}: { + pkgs, + lib, + ... +}: { + config = { + nixpkgs.allowedUnfree = ["google-chrome" "vscode"]; + + nixpkgs.config.contentAddressedByDefault = false; + + activeProfiles = ["browsing" "development"]; # "home-office" ]; + + xsession.windowManager.awesome.autostart = [ + "${pkgs.blueman}/bin/blueman-applet" + "${pkgs.networkmanagerapplet}/bin/nm-applet" + ]; + + enabledLanguages = ["cpp" "nix" "elixir" "erlang" "python"]; + + languages.python.useMS = true; + + programs.emacs.splashScreen = false; + + services.restic = { + enable = true; + exclude = (map (e: "%h/${e}") [".cache" ".cabal" ".cargo" ".emacs.d/eln-cache" ".emacs.d/.cache" ".gem" ".gradle" ".hex" ".kube" ".local" ".m2" ".minikube" ".minishift" ".mix" ".mozilla" "npm" ".opam" ".rancher" ".vscode-oss" "go/pkg"]) ++ ["_build" "deps" "result" "target" ".elixir_ls" "ccls-cache" ".direnv"]; + oneFileSystem = true; + repo = "rest:http://172.24.152.168:9999/nobbz"; + }; + systemd.user.timers.restic-backup.Timer.OnCalendar = lib.mkForce "hourly"; + + home.packages = [pkgs.vscode statix.defaultPackage.x86_64-linux]; + }; +} diff --git a/home/configurations/nmelzer@mimas.nix b/home/configurations/nmelzer@mimas.nix new file mode 100644 index 00000000..b45887bc --- /dev/null +++ b/home/configurations/nmelzer@mimas.nix @@ -0,0 +1,101 @@ +{ + unstable, + self, + ... +}: {pkgs, ...}: let + keepassWithPlugins = + pkgs.keepass.override {plugins = [pkgs.keepass-keepasshttp];}; +in { + config = { + nixpkgs.allowedUnfree = ["teamspeak-client" "google-chrome" "vscode"]; + + activeProfiles = ["browsing" "development" "home-office"]; + + dconf.enable = true; + + enabledLanguages = [ + # "agda" # Seems as if AGDA2-mode isn't on melpa anymore + "clojure" + "cpp" + "elixir" + "erlang" + "go" + "nim" + "nix" + # "ocaml" + "python" + "rust" + "tex" + ]; + + languages.python.useMS = true; + + programs.emacs.splashScreen = false; + + home.packages = let + p = pkgs; + s = self.packages.x86_64-linux; + in [ + p.handbrake + p.keybase-gui + p.minikube + p.gnome3.gnome-tweaks + p.freerdp + p.vscode + + s.gnucash-de + + keepassWithPlugins + ]; + + programs.obs-studio.enable = true; + programs.htop = { + settings = { + detailed_cpu_time = true; + }; + # meters.right = [ + # { kind = "Battery"; mode = 1; } + # "Tasks" + # "LoadAverage" + # "Uptime" + # ]; + }; + + xsession.windowManager.awesome.autostart = [ + "${pkgs.blueman}/bin/blueman-applet" + "${pkgs.networkmanagerapplet}/bin/nm-applet" + ]; + + services = { + keyleds.enable = true; + keybase.enable = true; + kbfs.enable = true; + insync.enable = true; + + restic = { + enable = true; + exclude = (map (e: "%h/${e}") [".cache" ".cabal" ".cargo" ".emacs.d/eln-cache" ".emacs.d/.cache" ".gem" ".gradle" ".hex" ".kube" ".local" ".m2" ".minikube" ".minishift" ".mix" ".mozilla" "npm" ".opam" ".rancher" ".vscode-oss" "go/pkg"]) ++ ["_build" "deps" "result" "target" ".elixir_ls" "ccls-cache" ".direnv"]; + oneFileSystem = true; + repo = "rest:http://172.24.152.168:9999/nobbz"; + }; + }; + + systemd.user.services = { + keybase-gui = { + Unit = { + Description = "Keybase GUI"; + Requires = ["keybase.service" "kbfs.service"]; + After = ["keybase.service" "kbfs.service"]; + }; + Service = { + ExecStart = "${pkgs.keybase-gui}/share/keybase/Keybase"; + PrivateTmp = true; + # Slice = "keybase.slice"; + }; + }; + }; + }; + # environment.pathsToLink = [ "/share/zsh" ]; +} +# /nix/store/7skqa8vxfydq7w3cix55ffvkmjb3b5da-python-2.7.18 + diff --git a/home/flake.lock b/home/flake.lock deleted file mode 100644 index 9d6155e1..00000000 --- a/home/flake.lock +++ /dev/null @@ -1,141 +0,0 @@ -{ - "nodes": { - "cryptomator": { - "locked": { - "lastModified": 1609951575, - "narHash": "sha256-8m3dvQKjpFk/Y0tpqAa7e5eOUrQnsDY1bfvROGILZbY=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2eb8804497a506d8c1a0363f99a08ad1d688a24f", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2eb8804497a506d8c1a0363f99a08ad1d688a24f", - "type": "github" - } - }, - "emacs": { - "locked": { - "lastModified": 1618111206, - "narHash": "sha256-JUNV8PKu77CytEUfQgAMml+gECO6CY6ymVuKu7TYkGM=", - "owner": "nix-community", - "repo": "emacs-overlay", - "rev": "75a4d7273b19ac442d246e2d5e109c9dfed58b35", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "emacs-overlay", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs-unstable" - ] - }, - "locked": { - "lastModified": 1618041827, - "narHash": "sha256-17Fzc8rmT6HOarCp+8k9RhmgMorNtzTk/rzew+FqHrA=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "f567ea8228e0ce718871d7346e444dd15ad702e5", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1618064689, - "narHash": "sha256-MGnHpM3bSd5JClA+1ad+jvcfNr0HrYoGmqCc2s7thkM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "ad7604ddbd9b299701fb5e15bc39cff80deffce2", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-20.09", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs-master": { - "locked": { - "lastModified": 1618128638, - "narHash": "sha256-MijJTAR8TPCOQ8bdGSH3rhoi2pgdzPiwsN+CV1yE38Y=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "0062afc0506491c2989a17eadf7239b5a7b38338", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "master", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "cryptomator": "cryptomator", - "emacs": "emacs", - "home-manager": "home-manager", - "nixpkgs-master": "nixpkgs-master", - "nixpkgs-stable": [ - "system", - "nixpkgs" - ], - "nixpkgs-unstable": [ - "system", - "unstable" - ], - "system": "system" - } - }, - "system": { - "inputs": { - "nixpkgs": "nixpkgs", - "unstable": "unstable" - }, - "locked": { - "lastModified": 1618129712, - "narHash": "sha256-s16tcS0cN/0t0Ih7Bfmmw7Egn5w45kC5OD2wtiyWVv0=", - "owner": "NobbZ", - "repo": "nixos-config", - "rev": "b0e1c4bc7dd23bc6e935567674d54a29e4da9991", - "type": "github" - }, - "original": { - "owner": "NobbZ", - "repo": "nixos-config", - "type": "github" - } - }, - "unstable": { - "locked": { - "lastModified": 1617899217, - "narHash": "sha256-gd5JHH7IkeoIQ/oiGZSqDpGdGt7DMRJTQ8JiD8+hdOQ=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "9e377a6ce42dccd9b624ae4ce8f978dc892ba0e2", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/home/flake.nix b/home/flake.nix deleted file mode 100644 index d1501027..00000000 --- a/home/flake.nix +++ /dev/null @@ -1,94 +0,0 @@ -{ - inputs = { - # Main channels - system.url = "github:NobbZ/nixos-config"; - nixpkgs-stable.follows = "system/nixpkgs"; - nixpkgs-unstable.follows = "system/unstable"; - - nixpkgs-master.url = "github:nixos/nixpkgs/master"; - - cryptomator.url = "github:nixos/nixpkgs/2eb8804497a506d8c1a0363f99a08ad1d688a24f"; - - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs-unstable"; - }; - - # Overlays - emacs.url = "github:nix-community/emacs-overlay"; - }; - - outputs = { self, emacs, ... }@inputs: - let - pkgs = import inputs.nixpkgs-unstable { - system = "x86_64-linux"; - overlays = builtins.attrValues self.overlays; - config.permittedInsecurePackages = [ "go-1.14.15" ]; - }; - - pkgs-stable = import inputs.nixpkgs-stable { - system = "x86_64-linux"; - overlays = builtins.attrValues self.overlays; - }; - in - { - overlay = import ./nix/myOverlay; - - overlays = { - inputs = final: prev: { inherit inputs; }; - emacs = emacs.overlay; - self = self.overlay; - }; - - lib = import ./lib inputs; - - homeConfigurations = { - tux-nixos = self.lib.mkHomeConfig "nmelzer" ./hosts/tux-nixos.nix; - delly-nixos = self.lib.mkHomeConfig "nmelzer" ./hosts/delly-nixos.nix; - nixos = self.lib.mkHomeConfig "demo" ./hosts/nixos.nix; - WS0005 = self.lib.mkHomeConfig "nmelzer" ./hosts/WS0005.nix; - }; - - apps.x86_64-linux = { - build = { type = "app"; program = "${self.packages.x86_64-linux.build-config}"; }; - switch = { type = "app"; program = "${self.packages.x86_64-linux.switch-config}"; }; - bump = { type = "app"; program = "${self.packages.x86_64-linux.bump-version}"; }; - }; - - defaultApp.x86_64-linux = self.apps.x86_64-linux.switch; - - packages.x86_64-linux = { - advcp = pkgs.callPackage ./packages/advcp { }; - elixir-lsp = pkgs.beam.packages.erlang.callPackage ./packages/elixir-lsp { - rebar3 = pkgs-stable.beam.packages.erlang.rebar3; - }; - erlang-ls = pkgs.beam.packages.erlang.callPackage ./packages/erlang-ls { }; - keyleds = pkgs.callPackage ./packages/keyleds { - stdenv = pkgs.gcc8Stdenv; - }; - rofi-unicode = pkgs.callPackage ./packages/rofi-unicode { }; - nix-zsh-completions = pkgs.nix-zsh-completions; - keepass = pkgs.keepass; - emacsGit = pkgs.emacsPgtkGcc; - cryptomator = inputs.cryptomator.legacyPackages.x86_64-linux.cryptomator; - dracula-konsole = pkgs.callPackage ./packages/dracula/konsole.nix { }; - gnucash-de = pkgs.callPackage ./packages/gnucash-de { }; - - update-config = pkgs.callPackage ./scripts/update-config { }; - build-config = pkgs.callPackage ./scripts/build-config { }; - switch-config = pkgs.callPackage ./scripts/switch-config { }; - bump-version = pkgs.callPackage ./scripts/bump-version { }; - } // builtins.mapAttrs - (_: config: - config.activationPackage) - self.homeConfigurations; - - checks.x86_64-linux = { - inherit (self.packages.x86_64-linux) advcp elixir-lsp erlang-ls keyleds - rofi-unicode nix-zsh-completions keepass emacsGit cryptomator; - } // builtins.mapAttrs - (_: config: - config.activationPackage) - self.homeConfigurations; - }; -} diff --git a/home/home.nix b/home/home.nix deleted file mode 100644 index 122eb7a9..00000000 --- a/home/home.nix +++ /dev/null @@ -1,50 +0,0 @@ -{ config, pkgs, lib, nixpkgs-2105, unstable, self, inputs, ... }: -let - # nixPath = builtins.concatStringsSep ":" [ - # "nixpkgs=${inputs.unstable}" - # "nixos-config=/etc/nixos/configuration.nix" - # "/nix/var/nix/profiles/per-user/root/channels" - # ]; -in -{ - profiles.base.enable = true; - fonts.fontconfig.enable = true; - - systemd.user = { - # sessionVariables = { NIX_PATH = nixPath; }; - }; - - xsession.windowManager.awesome.enable = true; - - home = { - # sessionVariables = { NIX_PATH = nixPath; }; - - packages = - let - p = pkgs; - s = self; - in - [ - p.cachix - # nix-prefetch-scripts - p.nix-review - p.exercism - p.tmate - p.element-desktop - p.powershell - s.dracula-konsole - - p.fira-code - p.cascadia-code - - p.lefthook - - (p.writeShellScriptBin "timew" '' - export TIMEWARRIORDB="${config.home.homeDirectory}/timmelzer@gmail.com/timewarrior" - exec ${p.timewarrior}/bin/timew "$@" - '') - ]; - - stateVersion = "20.09"; - }; -} diff --git a/home/hosts/WS0005.nix b/home/hosts/WS0005.nix deleted file mode 100644 index 97244422..00000000 --- a/home/hosts/WS0005.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ pkgs, ... }: - -{ - config = { - activeProfiles = [ "browsing" "development" ]; - - enabledLanguages = [ - "erlang" - "go" - "nix" - "python" - ]; - - programs.zsh.initExtraBeforeCompInit = '' - . ~/.nix-profile/etc/profile.d/nix.sh - ''; - - languages.python.useMS = true; - - programs.emacs.splashScreen = false; - - home.packages = [ pkgs.nixUnstable ]; - - programs.tmux.secureSocket = false; # disable /run sockets, as those seem to be not available in WSL - }; -} diff --git a/home/hosts/delly-nixos.nix b/home/hosts/delly-nixos.nix deleted file mode 100644 index 6025c99d..00000000 --- a/home/hosts/delly-nixos.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ pkgs, ... }: - -{ - config = { - nixpkgs.config.contentAddressedByDefault = false; - - activeProfiles = [ "browsing" "development" ]; # "home-office" ]; - - # xsession.windowManager.awesome.terminalEmulator = - # "${pkgs.lxterminal}/bin/lxterminal"; - - xsession.windowManager.awesome.autostart = [ - "${pkgs.blueman}/bin/blueman-applet" - "${pkgs.networkmanagerapplet}/bin/nm-applet" - ]; - - enabledLanguages = [ "cpp" "nix" "elixir" "erlang" "python" ]; - - languages.python.useMS = true; - - programs.emacs.splashScreen = false; - - home.packages = [ ]; - }; -} diff --git a/home/hosts/nixos.nix b/home/hosts/nixos.nix deleted file mode 100644 index f4f3fbc1..00000000 --- a/home/hosts/nixos.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ pkgs, stable, self, ... }: - -{ - config = { - activeProfiles = [ "browsing" "development" ]; - - enabledLanguages = - [ "elixir" "go" "lua" "nix" "python" "terraform" ]; - - languages.python.useMS = true; - - programs.emacs.splashScreen = false; - programs.emacs.extraPackages = ep: [ ep.robot-mode ]; - - services.gnome-keyring.enable = true; - - home.packages = [ - stable.mysqlWorkbench - self.gnucash-de - ]; - - systemd.user.services = { - imwheel = { - Unit = { - Description = "IMWheel"; - Wants = [ "display-manager.service" ]; - After = [ "display-manager.service" ]; - }; - - Service = { - Type = "simple"; - Environment = [ "XAUTHORITY=%h/.Xauthority" ]; - ExecStart = "${pkgs.imwheel}/bin/imwheel -d"; - ExecStop = "${pkgs.procps}/bin/pkill imwheel"; - - Restart = "on-failure"; - RestartSec = "10"; - }; - - Install = { - WantedBy = [ "graphical-session.target" ]; - }; - }; - }; - }; -} diff --git a/home/hosts/tux-nixos.nix b/home/hosts/tux-nixos.nix deleted file mode 100644 index 0bb4962b..00000000 --- a/home/hosts/tux-nixos.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ pkgs, unstable, self, ... }: -let - keepassWithPlugins = - pkgs.keepass.override { plugins = [ pkgs.keepass-keepasshttp ]; }; -in -{ - config = { - activeProfiles = [ "browsing" "development" "home-office" ]; - - dconf.enable = true; - - enabledLanguages = [ - "agda" - "clojure" - "cpp" - "elixir" - "erlang" - "go" - "nix" - # "ocaml" - "python" - "rust" - "tex" - ]; - - languages.python.useMS = true; - - programs.emacs.splashScreen = false; - - home.packages = - let - p = pkgs; - s = self; - in - [ - p.insync - p.handbrake - p.keybase-gui - p.minikube - p.lutris - p.steam - p.gnome3.gnome-tweaks - - s.gnucash-de - - keepassWithPlugins - ]; - - programs.obs-studio.enable = true; - programs.htop = { - detailedCpuTime = true; - meters.right = [ - { kind = "Battery"; mode = 1; } - "Tasks" - "LoadAverage" - "Uptime" - ]; - }; - - xsession.windowManager.awesome.autostart = [ - "${pkgs.blueman}/bin/blueman-applet" - "${pkgs.networkmanagerapplet}/bin/nm-applet" - ]; - - services = { - keyleds.enable = true; - keybase.enable = true; - kbfs.enable = true; - }; - - systemd.user.services = { - keybase-gui = { - Unit = { - Description = "Keybase GUI"; - Requires = [ "keybase.service" "kbfs.service" ]; - After = [ "keybase.service" "kbfs.service" ]; - }; - Service = { - ExecStart = "${pkgs.keybase-gui}/share/keybase/Keybase"; - PrivateTmp = true; - # Slice = "keybase.slice"; - }; - }; - }; - }; - # environment.pathsToLink = [ "/share/zsh" ]; -} -# /nix/store/7skqa8vxfydq7w3cix55ffvkmjb3b5da-python-2.7.18 diff --git a/home/modules/default.nix b/home/modules/default.nix index 82f73ad9..3388cba1 100644 --- a/home/modules/default.nix +++ b/home/modules/default.nix @@ -1,12 +1,44 @@ -{ filterAttrs, mapAttrs, mapAttrsToList, ... }: -let - modules = - let - all = builtins.readDir ./.; - dirs = filterAttrs (k: v: v == "directory") all; - in - mapAttrs (k: v: ./. + "/${k}") dirs; -in -{ - all-modules = mapAttrsToList (k: v: v) modules; -} // modules +inputs: { + "profiles" = import ./profiles inputs; + "profiles/base" = import ./profiles/base inputs; + "profiles/browsing" = import ./profiles/browsing inputs; + "profiles/development" = import ./profiles/development inputs; + "profiles/home-office" = import ./profiles/home-office inputs; + + "languages" = import ./languages inputs; + "languages/agda" = import ./languages/agda inputs; + "languages/c++" = import ./languages/c++ inputs; + "languages/clojure" = import ./languages/clojure inputs; + "languages/elixir" = import ./languages/elixir inputs; + "languages/erlang" = import ./languages/erlang inputs; + "languages/go" = import ./languages/go inputs; + "languages/nim" = import ./languages/nim inputs; + "languages/nix" = import ./languages/nix inputs; + "languages/python" = import ./languages/python inputs; + "languages/rust" = import ./languages/rust inputs; + "languages/tex" = import ./languages/tex inputs; + "languages/lua" = import ./languages/lua inputs; + "languages/terraform" = import ./languages/terraform inputs; + + "programs/advcp" = import ./programs/advcp inputs; + "programs/openshift" = import ./programs/openshift inputs; + "programs/zshell" = import ./programs/zshell inputs; + "programs/nixpkgs" = import ./programs/nixpkgs inputs; + "programs/exa" = import ./programs/exa inputs; + "programs/emacs" = import ./programs/emacs inputs; + "programs/emacs/beacon" = import ./programs/emacs/beacon.nix inputs; + "programs/emacs/company" = import ./programs/emacs/company.nix inputs; + "programs/emacs/helm" = import ./programs/emacs/helm.nix inputs; + "programs/emacs/lsp" = import ./programs/emacs/lsp.nix inputs; + "programs/emacs/projectile" = import ./programs/emacs/projectile.nix inputs; + "programs/emacs/telephoneline" = import ./programs/emacs/telephoneline.nix inputs; + "programs/emacs/lib" = import ./programs/emacs/lib.nix inputs; + "programs/emacs/whichkey" = import ./programs/emacs/whichkey inputs; + + "services/keyleds" = import ./services/keyleds inputs; + "services/insync" = import ./services/insync inputs; + "services/restic" = import ./services/restic inputs; + + "misc/awesome" = import ./misc/awesome inputs; + "misc/home" = import ./misc/home inputs; +} diff --git a/home/modules/emacs/polymode/default.nix b/home/modules/emacs/polymode/default.nix deleted file mode 100644 index e76d99c3..00000000 --- a/home/modules/emacs/polymode/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ config, lib, ... }: - -with lib; -let emacs = config.programs.emacs; -in -{ - config = lib.mkIf emacs.enable { - programs.emacs.extraPackages = ep: [ ep.polymode ]; - - programs.emacs.localPackages."init-polymode" = { - tag = "Setup and initialise polymode"; - comments = [ ]; - requires = [ ]; - code = '' - ;; polymode - (add-to-list 'auto-mode-alist '("\\.nix$" . poly-nix-mode)) - - (define-hostmode poly-nix-hostmode :mode 'nix-mode) - - (define-innermode poly-elisp-expr-nix-innermode - :mode 'emacs-lisp-mode - :head-matcher (cons "'''\n\\( *;;.*\n\\)" 1) - :tail-matcher " *''';$" - :head-mode 'body - :tail-mode 'host) - - (define-polymode poly-nix-mode - :hostmode 'poly-nix-hostmode - :innermodes '(poly-elisp-expr-nix-innermode)) - ''; - }; - }; -} diff --git a/home/modules/exa/default.nix b/home/modules/exa/default.nix deleted file mode 100644 index 70f122bf..00000000 --- a/home/modules/exa/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, pkgs, ... }: -let cfg = config.programs.exa; - -in -{ - config = lib.mkIf cfg.enable { - home.packages = [ pkgs.exa ]; - - programs.zshell.aliases = { - ll = - "exa --header --git --classify --long --binary --group --time-style=long-iso --links --all --all --group-directories-first --sort=name"; - }; - }; -} diff --git a/home/modules/languages/agda/default.nix b/home/modules/languages/agda/default.nix index 811ac3dc..e7e8f605 100644 --- a/home/modules/languages/agda/default.nix +++ b/home/modules/languages/agda/default.nix @@ -1,8 +1,10 @@ -{ config, lib, ... }: -let cfg = config.languages.agda; - -in -{ +_: { + config, + lib, + ... +}: let + cfg = config.languages.agda; +in { options.languages.agda = { enable = lib.mkEnableOption "Agda language support"; }; @@ -11,9 +13,9 @@ in programs.emacs = { localPackages."init-agda" = { tag = "Setup Agda"; - comments = [ ]; - requires = [ ]; - packageRequires = ep: with ep.melpaStablePackages; [ agda2-mode eri annotation ]; + comments = []; + requires = []; + packageRequires = ep: with ep.melpaStablePackages; [agda2-mode eri annotation]; code = '' (load-library "agda2-mode") ''; diff --git a/home/modules/languages/c++/default.nix b/home/modules/languages/c++/default.nix index 6ab09ee3..6d6c4f6c 100644 --- a/home/modules/languages/c++/default.nix +++ b/home/modules/languages/c++/default.nix @@ -1,10 +1,13 @@ -{ config, lib, pkgs, ... }: -let +_: { + config, + lib, + pkgs, + ... +}: let cfg = config.languages.cpp; inherit (pkgs) ccls; -in -{ +in { options.languages.cpp = { enable = lib.mkEnableOption "Enable support for C++ language"; }; @@ -13,9 +16,9 @@ in programs.emacs = { localPackages."init-cpp" = { tag = "Setup C++"; - requires = [ "ccls" ]; - packageRequires = ep: [ ep.ccls ]; - comments = [ ]; + requires = ["ccls"]; + packageRequires = ep: [ep.ccls]; + comments = []; code = '' (setq ccls-executable "${ccls}/bin/ccls") ''; diff --git a/home/modules/languages/c/default.nix b/home/modules/languages/c/default.nix deleted file mode 100644 index 3744a7ab..00000000 --- a/home/modules/languages/c/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, lib, pkgs, ... }: -let enabled = config.languages.c.enable || config.languages.cpp.enable; - -in -{ - options.languages.c = { - enable = lib.mkEnableOption "Enable support for C language"; - }; - - # options.languages.cpp = { - # enable = lib.mkEnableOption "Enable support for C++ language"; - # }; - - config = lib.mkIf enabled { - programs.emacs.extraPackages = ep: [ ep.cmake-mode ]; - - programs.emacs.lsp-mode = { - enable = true; - languages = [ "c" "c++" ]; - }; - - programs.emacs.extraConfig = '' - (setq lsp-clients-clangd-executable "${pkgs.clang-tools}/bin/clangd") - ''; - }; -} diff --git a/home/modules/languages/clojure/default.nix b/home/modules/languages/clojure/default.nix index 4bf20dde..767706fa 100644 --- a/home/modules/languages/clojure/default.nix +++ b/home/modules/languages/clojure/default.nix @@ -1,22 +1,25 @@ -{ config, lib, pkgs, ... }: -let cfg = config.languages.clojure; - -in -{ +_: { + config, + lib, + pkgs, + ... +}: let + cfg = config.languages.clojure; +in { options.languages.clojure = { enable = lib.mkEnableOption "Enable support for the clojure language"; }; config = lib.mkIf cfg.enable { programs.emacs = { - extraPackages = ep: [ ep.clojure-mode ]; + extraPackages = ep: [ep.clojure-mode]; lsp-mode = { enable = true; - languages = [ "clojure" ]; + languages = ["clojure"]; }; - extraConfig = '' + extraInit = '' (setenv "PATH" (concat "${pkgs.leiningen}/bin:" (getenv "PATH"))) (setq lsp-clojure-server-command '("${pkgs.bash}/bin/bash" "-c" "${pkgs.clojure-lsp}/bin/clojure-lsp")) diff --git a/home/modules/languages/default.nix b/home/modules/languages/default.nix index 198eb4f4..7a0843dc 100644 --- a/home/modules/languages/default.nix +++ b/home/modules/languages/default.nix @@ -1,30 +1,15 @@ -{ config, lib, ... }: -let - langsEnabler = - let reducer = l: r: { "${r}".enable = true; } // l; - in builtins.foldl' reducer { } config.enabledLanguages; - -in -{ - imports = [ - ./agda - ./c - ./c++ - ./clojure - ./elixir - ./erlang - ./go - ./lua - ./nix - ./ocaml - ./python - ./rust - ./terraform - ./tex - ]; - +_: { + config, + lib, + ... +}: let + langsEnabler = let + reducer = l: r: {"${r}".enable = true;} // l; + in + builtins.foldl' reducer {} config.enabledLanguages; +in { options.enabledLanguages = - lib.mkOption { type = lib.types.listOf lib.types.str; }; + lib.mkOption {type = lib.types.listOf lib.types.str;}; - config = { languages = langsEnabler; }; + config = {languages = langsEnabler;}; } diff --git a/home/modules/languages/elixir/default.nix b/home/modules/languages/elixir/default.nix index a5a0966c..d3e1827d 100644 --- a/home/modules/languages/elixir/default.nix +++ b/home/modules/languages/elixir/default.nix @@ -1,10 +1,13 @@ -{ config, lib, pkgs, self, ... }: -let +{self, ...}: { + config, + lib, + pkgs, + ... +}: let cfg = config.languages.elixir; - inherit (self) elixir-lsp; -in -{ + inherit (self.packages.x86_64-linux) elixir-lsp; +in { options.languages.elixir = { enable = lib.mkEnableOption "Enable support for elixir language"; }; @@ -19,13 +22,13 @@ in programs.emacs = { lsp-mode = { enable = true; - languages = [ "elixir" ]; + languages = ["elixir"]; }; localPackages."init-elixir" = { tag = "Setup elixir"; - comments = [ ]; - requires = [ "company" "flycheck" ]; + comments = []; + requires = ["company" "flycheck"]; packageRequires = ep: [ ep.company ep.elixir-mode diff --git a/home/modules/languages/erlang/default.nix b/home/modules/languages/erlang/default.nix index 3c5ee44e..593b6335 100644 --- a/home/modules/languages/erlang/default.nix +++ b/home/modules/languages/erlang/default.nix @@ -1,10 +1,13 @@ -{ config, lib, pkgs, self, ... }: -let +{self, ...}: { + config, + lib, + pkgs, + ... +}: let cfg = config.languages.erlang; - inherit (self) erlang-ls; -in -{ + inherit (self.packages.x86_64-linux) erlang-ls; +in { options.languages.erlang = { enable = lib.mkEnableOption "Enable support for erlang language"; }; @@ -12,16 +15,16 @@ in config = lib.mkIf cfg.enable { programs.emacs.extraPackages = ep: [ (ep.erlang.overrideAttrs (oa: { - buildInputs = oa.buildInputs ++ [ pkgs.perl pkgs.ncurses ]; + buildInputs = oa.buildInputs ++ [pkgs.perl pkgs.ncurses]; })) ]; programs.emacs.lsp-mode = { enable = true; - languages = [ "erlang" ]; + languages = ["erlang"]; }; - programs.emacs.extraConfig = '' + programs.emacs.extraInit = '' ;; Configure erlang related stuff (setq lsp-erlang-server-path "${erlang-ls}/bin/erlang_ls") diff --git a/home/modules/languages/go/default.nix b/home/modules/languages/go/default.nix index 60755bc6..34a57ea5 100644 --- a/home/modules/languages/go/default.nix +++ b/home/modules/languages/go/default.nix @@ -1,23 +1,26 @@ -{ config, lib, pkgs, ... }: -let cfg = config.languages.go; - -in -{ +_: { + config, + lib, + pkgs, + ... +}: let + cfg = config.languages.go; +in { options.languages.go = { enable = lib.mkEnableOption "Enable support for the go language"; }; config = lib.mkIf cfg.enable { - programs.emacs.extraPackages = ep: [ ep.go-mode ]; + programs.emacs.extraPackages = ep: [ep.go-mode]; programs.emacs.lsp-mode = { enable = true; - languages = [ "go" ]; + languages = ["go"]; }; - home.packages = [ pkgs.go ]; + home.packages = [pkgs.go]; - programs.emacs.extraConfig = '' + programs.emacs.extraInit = '' (add-to-list 'exec-path "${pkgs.gopls}/bin") (add-hook 'go-mode-hook diff --git a/home/modules/languages/lua/default.nix b/home/modules/languages/lua/default.nix index 754fef6d..57d2f9be 100644 --- a/home/modules/languages/lua/default.nix +++ b/home/modules/languages/lua/default.nix @@ -1,12 +1,14 @@ -{ config, lib, ... }: -let cfg = config.languages.lua; - -in -{ +_: { + config, + lib, + ... +}: let + cfg = config.languages.lua; +in { options.languages.lua = { enable = lib.mkEnableOption "Enable support for lua language"; }; config = - lib.mkIf cfg.enable { programs.emacs.extraPackages = ep: [ ep.lua-mode ]; }; + lib.mkIf cfg.enable {programs.emacs.extraPackages = ep: [ep.lua-mode];}; } diff --git a/home/modules/languages/nim/default.nix b/home/modules/languages/nim/default.nix new file mode 100644 index 00000000..0573c9e4 --- /dev/null +++ b/home/modules/languages/nim/default.nix @@ -0,0 +1,33 @@ +{unstable, ...}: { + config, + lib, + pkgs, + ... +}: let + cfg = config.languages.nim; + + inherit (unstable.legacyPackage.x86_64-linux) nim; +in { + options.languages.nim = { + enable = lib.mkEnableOption "Nim-lang"; + }; + + config = lib.mkIf cfg.enable { + programs.emacs = { + localPackages."init-nim" = { + tag = "Setup Nim Mode"; + requires = ["company" "flycheck"]; + packageRequires = ep: [ep.nim-mode ep.lsp-mode ep.company ep.flycheck]; + comments = []; + code = '' + (add-hook 'nim-mode-hook + (lambda () + (subword-mode) + (company-mode) + (flycheck-mode) + (lsp-lens-mode))) + ''; + }; + }; + }; +} diff --git a/home/modules/languages/nix/default.nix b/home/modules/languages/nix/default.nix index 442b7755..af3c5c16 100644 --- a/home/modules/languages/nix/default.nix +++ b/home/modules/languages/nix/default.nix @@ -1,22 +1,29 @@ -{ config, lib, pkgs, ... }: -let cfg = config.languages.nix; +{rnix-lsp, ...}: { + config, + lib, + pkgs, + rnix-lsp, + ... +}: let + cfg = config.languages.nix; -in -{ + # rnixLsp = rnix-lsp.defaultPackage.x86_64-linux; + rnixLsp = pkgs.rnix-lsp; +in { options.languages.nix = { enable = lib.mkEnableOption "Enable support for the nix language"; }; config = lib.mkIf cfg.enable { - programs.emacs.extraPackages = ep: [ ep.lsp-mode ep.nix-mode ep.flycheck ]; + programs.emacs.extraPackages = ep: [ep.lsp-mode ep.nix-mode ep.flycheck]; - programs.emacs.extraConfig = '' + programs.emacs.extraInit = '' (require 'lsp-mode) ;; make lsp-mode aware of nix (add-to-list 'lsp-language-id-configuration '(nix-mode . "nix")) (lsp-register-client - (make-lsp-client :new-connection (lsp-stdio-connection '("${pkgs.rnix-lsp}/bin/rnix-lsp")) + (make-lsp-client :new-connection (lsp-stdio-connection '("${rnixLsp}/bin/rnix-lsp")) :major-modes '(nix-mode) :server-id 'nix)) diff --git a/home/modules/languages/ocaml/default.nix b/home/modules/languages/ocaml/default.nix deleted file mode 100644 index 54effd16..00000000 --- a/home/modules/languages/ocaml/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, lib, pkgs, ... }: -let cfg = config.languages.ocaml; - -in -{ - options.languages.ocaml = { - enable = lib.mkEnableOption "Enable support for ocaml language"; - }; - - config = lib.mkIf cfg.enable { - programs.emacs.lsp-mode = { - enable = true; - languages = [ "caml" ]; - }; - - programs.emacs = { - localPackages."init-ocaml" = { - tag = "Setup OCaml"; - comments = [ ]; - requires = [ "caml-font" ]; - packageRequires = ep: [ ep.lsp-mode ep.caml ep.company ep.flycheck ]; - code = '' - (add-to-list 'exec-path "${pkgs.ocaml-lsp}/bin") - (setq lsp-ocaml-lang-server-command '("ocamllsp")) - - (add-to-list 'auto-mode-alist '("\\.ml[iylp]?$" . caml-mode)) - (autoload 'caml-mode "caml" "Major mode for editing OCaml code." t) - - (add-hook 'caml-mode-hook - (lambda () - (lsp-ui-mode) - (lsp-lens-mode) - (subword-mode) - (company-mode) - (flycheck-mode))) - ''; - }; - }; - }; -} diff --git a/home/modules/languages/python/default.nix b/home/modules/languages/python/default.nix index 23c45b9f..1237628c 100644 --- a/home/modules/languages/python/default.nix +++ b/home/modules/languages/python/default.nix @@ -1,23 +1,27 @@ -{ config, lib, pkgs, ... }: -let +_: { + config, + lib, + pkgs, + ... +}: let cfg = config.languages.python; pyls = "${pkgs.python37Packages.python-language-server}/bin/pyls"; mspyls = "${pkgs.python-language-server}/bin/python-language-server"; - lsBin = if cfg.useMS then mspyls else pyls; + lsBin = + if cfg.useMS + then mspyls + else pyls; lsHook = - if cfg.useMS then - "(add-hook 'python-mode-hook (lambda () (require 'lsp-python-ms) (lsp)))" - else - ""; + if cfg.useMS + then "(add-hook 'python-mode-hook (lambda () (require 'lsp-python-ms) (lsp)))" + else ""; lsExec = - if cfg.useMS then - ''(setq lsp-python-ms-executable "${lsBin}")'' - else - ''(setq lsp-pyls-server-command '("${lsBin}"))''; -in -{ + if cfg.useMS + then ''(setq lsp-python-ms-executable "${lsBin}")'' + else ''(setq lsp-pyls-server-command '("${lsBin}"))''; +in { options.languages.python = { enable = lib.mkEnableOption "Enable support for python language"; useMS = lib.mkEnableOption "Use MS language server rather than palantirs"; @@ -26,19 +30,27 @@ in config = lib.mkIf cfg.enable { programs.emacs.lsp-mode = { enable = true; - languages = if cfg.useMS then [ ] else [ "python" ]; + languages = + if cfg.useMS + then [] + else ["python"]; }; programs.emacs.localPackages."init-python" = { tag = "Setup and prepare the python language modes"; - comments = [ ]; - requires = [ ]; - packageRequires = (ep: + comments = []; + requires = []; + packageRequires = ep: [ ep.lsp-pyright ep.python-docstring (config.programs.emacs.localPackages."init-lsp".packageRequires ep) - ] ++ (if cfg.useMS then [ ep.lsp-python-ms ] else [ ])); + ] + ++ ( + if cfg.useMS + then [ep.lsp-python-ms] + else [] + ); code = '' ${lsHook} diff --git a/home/modules/languages/rust/default.nix b/home/modules/languages/rust/default.nix index 864837e4..ce053877 100644 --- a/home/modules/languages/rust/default.nix +++ b/home/modules/languages/rust/default.nix @@ -1,23 +1,28 @@ -{ config, lib, ... }: -let cfg = config.languages.rust; - -in -{ +_: { + config, + lib, + ... +}: let + cfg = config.languages.rust; +in { options.languages.rust = { enable = lib.mkEnableOption "Enable support for Rust language"; }; config = lib.mkIf cfg.enable { - programs.emacs.extraPackages = ep: [ ep.rust-mode ]; + programs.emacs.extraPackages = ep: [ep.rust-mode ep.pest-mode]; programs.emacs.lsp-mode = { enable = true; - languages = [ "rust" ]; + languages = ["rust"]; }; - programs.emacs.extraConfig = '' + programs.emacs.extraInit = '' (setq lsp-rust-rls-server-command "rls") + (autoload 'pest-mode "pest-mode") + (add-to-list #'auto-mode-alist '("\\.pest\\'" .pest-mode)) + (add-hook 'rust-mode-hook (lambda () (subword-mode) diff --git a/home/modules/languages/terraform/default.nix b/home/modules/languages/terraform/default.nix index 3013f311..d2e53e16 100644 --- a/home/modules/languages/terraform/default.nix +++ b/home/modules/languages/terraform/default.nix @@ -1,8 +1,10 @@ -{ config, lib, ... }: -let cfg = config.languages.terraform; - -in -{ +_: { + config, + lib, + ... +}: let + cfg = config.languages.terraform; +in { options.languages.terraform = { enable = lib.mkEnableOption "Enable support for the terraform lanugage"; }; @@ -11,9 +13,9 @@ in programs.emacs = { localPackages."init-terraform" = { tag = "Setup and prepare terraform editing modes"; - comments = [ ]; - requires = [ "company-terraform" ]; - packageRequires = ep: [ ep.company-terraform ep.terraform-mode ]; + comments = []; + requires = ["company-terraform"]; + packageRequires = ep: [ep.company-terraform ep.terraform-mode]; code = '' (add-hook 'terraform-mode-hook (lambda () diff --git a/home/modules/languages/tex/default.nix b/home/modules/languages/tex/default.nix index 030f480b..c1c1d8e8 100644 --- a/home/modules/languages/tex/default.nix +++ b/home/modules/languages/tex/default.nix @@ -1,20 +1,23 @@ -{ config, lib, pkgs, ... }: -let cfg = config.languages.tex; - -in -{ +_: { + config, + lib, + pkgs, + ... +}: let + cfg = config.languages.tex; +in { options.languages.tex = { enable = lib.mkEnableOption "LaTeX language support"; }; config = lib.mkIf cfg.enable { - programs.emacs.extraPackages = ep: [ ep.auctex ]; + programs.emacs.extraPackages = ep: [ep.auctex]; programs.emacs.lsp-mode = { enable = true; }; - programs.emacs.extraConfig = '' + programs.emacs.extraInit = '' (add-to-list 'exec-path "${pkgs.texlab}/bin") (add-hook 'tex-mode-hook diff --git a/home/modules/awesome/default.nix b/home/modules/misc/awesome/default.nix similarity index 96% rename from home/modules/awesome/default.nix rename to home/modules/misc/awesome/default.nix index e814be88..0702c5b0 100644 --- a/home/modules/awesome/default.nix +++ b/home/modules/misc/awesome/default.nix @@ -1,26 +1,30 @@ -{ config, lib, pkgs, self, ... }: -let +{self, ...}: { + config, + lib, + pkgs, + ... +}: let cfg = config.xsession.windowManager.awesome; rofi = pkgs.rofi.override { - plugins = [ pkgs.rofi-emoji ]; + plugins = [pkgs.rofi-emoji]; }; - autostartScript = - let - entries = builtins.map (e: "\"${e}\",") cfg.autostart; - in - '' - -- Autorun programs - autorunApps = { - ${builtins.concatStringsSep "\n " entries} - } + self' = self.packages.x86_64-linux; - for app = 1, #autorunApps do - awful.util.spawn(autorunApps[app]) - end - -- }}} - ''; + autostartScript = let + entries = builtins.map (e: "\"${e}\",") cfg.autostart; + in '' + -- Autorun programs + autorunApps = { + ${builtins.concatStringsSep "\n " entries} + } + + for app = 1, #autorunApps do + awful.util.spawn(autorunApps[app]) + end + -- }}} + ''; errorHandling = '' -- {{{ Error handling @@ -50,8 +54,7 @@ let end -- }}} ''; -in -{ +in { options.xsession.windowManager.awesome = { terminalEmulator = lib.mkOption { type = lib.types.str; @@ -60,17 +63,27 @@ in launcher = lib.mkOption { type = lib.types.str; - default = "${rofi}/bin/rofi -modi drun#run#window#ssh#emoji#unicode:${self.rofi-unicode}/bin/rofiunicode.sh -show drun -show-icons"; + default = "${rofi}/bin/rofi -modi drun#run#window#ssh#emoji#unicode:${self'."rofi/unicode"}/bin/rofiunicode.sh -show drun -show-icons"; }; autostart = lib.mkOption { type = lib.types.listOf lib.types.str; - default = [ ]; + default = []; }; }; config = lib.mkIf cfg.enable { xsession.enable = true; + + xsession.windowManager.awesome.package = pkgs.awesome.overrideAttrs (oa: { + src = pkgs.fetchFromGitHub { + owner = "awesomewm"; + repo = "awesome"; + rev = "22dedf7"; + sha256 = "sha256-GD0MxMU4tz5SbahL0+ADUQXNoq1fIxOSXiEwoObC0ng="; + }; + }); + home.file.".config/awesome/rc.lua".text = '' --[[ Awesome WM configuration @@ -634,7 +647,7 @@ in client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) -- }}} - ${lib.optionalString (cfg.autostart != [ ]) autostartScript} + ${lib.optionalString (cfg.autostart != []) autostartScript} ''; }; } diff --git a/home/modules/misc/home/default.nix b/home/modules/misc/home/default.nix new file mode 100644 index 00000000..a633f1ed --- /dev/null +++ b/home/modules/misc/home/default.nix @@ -0,0 +1,52 @@ +{ + nixpkgs-2105, + unstable, + self, + ... +}: { + config, + pkgs, + lib, + ... +}: let + self' = self.packages.x86_64-linux; +in { + profiles.base.enable = true; + fonts.fontconfig.enable = true; + + systemd.user = { + # sessionVariables = { NIX_PATH = nixPath; }; + }; + + xsession.windowManager.awesome.enable = true; + + home = { + # sessionVariables = { NIX_PATH = nixPath; }; + + packages = let + p = pkgs; + s = self'; + in [ + p.cachix + # nix-prefetch-scripts + p.nix-review + p.exercism + p.tmate + p.element-desktop + # p.powershell + s."dracula/konsole" + + p.fira-code + p.cascadia-code + + p.lefthook + + (p.writeShellScriptBin "timew" '' + export TIMEWARRIORDB="${config.home.homeDirectory}/timmelzer@gmail.com/timewarrior" + exec ${p.timewarrior}/bin/timew "$@" + '') + ]; + + stateVersion = "20.09"; + }; +} diff --git a/home/profiles/base/default.nix b/home/modules/profiles/base/default.nix similarity index 73% rename from home/profiles/base/default.nix rename to home/modules/profiles/base/default.nix index b4d6de98..c652a8ef 100644 --- a/home/profiles/base/default.nix +++ b/home/modules/profiles/base/default.nix @@ -1,13 +1,16 @@ -{ config, lib, pkgs, inputs, ... }: -let +{self, ...}: { + config, + lib, + pkgs, + ... +}: let cfg = config.profiles.base; - inherit (inputs.self.packages.x86_64-linux) emacs; - - dag = lib.hm.dag; + inherit (self.packages.x86_64-linux) emacs; + inherit (lib.hm) dag; # TODO: make these a bit more nice, so that repeating the hosts and individual config isn't necessary. - zerotierHosts = [ "delly-nixos.adoring_suess.zerotier" "tux-nixos.adoring_suess.zerotier" "nixos.adoring_suess.zerotier" ]; + zerotierHosts = ["delly-nixos.adoring_suess.zerotier" "tux-nixos.adoring_suess.zerotier" "nixos.adoring_suess.zerotier"]; zsh-complete = pkgs.stdenv.mkDerivation { pname = "nix-zsh-completion-with-flakes"; @@ -15,15 +18,14 @@ let src = ./nix-completions.sh; - phases = [ "installPhase" ]; + phases = ["installPhase"]; installPhase = '' mkdir -p $out cp $src $out/_nix ''; }; -in -{ +in { options.profiles.base = { enable = lib.mkEnableOption "The base profile, should be always enabled"; }; @@ -36,11 +38,11 @@ in }; gtk.enable = true; - gtk.theme.package = pkgs.gnome3.gnome_themes_standard; + gtk.theme.package = pkgs.gnome3.gnome-themes-extra; gtk.theme.name = "Adwaita-dark"; home.keyboard.layout = "de"; - home.packages = [ pkgs.hydra-check pkgs.gnome3.dconf ]; + home.packages = [pkgs.hydra-check pkgs.dconf]; xsession = { enable = true; @@ -54,6 +56,7 @@ in advancedCopy.enable = true; bat.enable = true; direnv.enable = true; + direnv.nix-direnv.enable = true; exa.enable = true; home-manager.enable = true; htop.enable = true; @@ -65,19 +68,15 @@ in compression = true; matchBlocks = { - "*.adoring_suess.zerotier" = dag.entryAfter zerotierHosts { + "*.internal.nobbz.dev" = dag.entryAfter zerotierHosts { identityFile = "~/.ssh/id_rsa"; user = "nmelzer"; }; - "delly-nixos.adoring_suess.zerotier" = { - hostname = "172.24.199.101"; - }; "ryzen-ubuntu.adoring_suess.zerotier" = { hostname = "172.24.237.73"; }; - "tux-nixos.adoring_suess.zerotier" = { - hostname = "172.24.152.168"; + "mimas.internal.nobbz.dev" = { localForwards = [ { bind.port = 60080; @@ -86,8 +85,7 @@ in } ]; }; - "nixos.adoring_suess.zerotier" = { - hostname = "172.24.231.199"; + "thetys.internal.nobbz.dev" = { user = "demo"; }; @@ -115,24 +113,35 @@ in identityFile = "~/.ssh/vogel"; }; - "deploy-vogel.custpoc.cloudseeds.de" = dag.entryBefore [ - "*.custpoc.cloudseeds.de" - "*.cloudseeds.de" - ] + "deploy-vogel.custpoc.cloudseeds.de" = + dag.entryBefore [ + "*.custpoc.cloudseeds.de" + "*.cloudseeds.de" + ] { user = "cloudseeds"; identityFile = "~/.ssh/vogel"; }; - "repo.cloudseeds.de" = dag.entryBefore [ "*.cloudseeds.de" ] { + "repo.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { identityFile = "~/.ssh/id_rsa"; }; - "*.custpoc.cloudseeds.de" = dag.entryBefore [ "*.cloudseeds.de" ] { + "*.custpoc.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { user = "norbert.melzer"; identityFile = "~/.ssh/actum-gitlab"; }; + "com01.internal.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { + hostname = "192.168.123.22"; + user = "root"; + }; + + "ironic.internal.cloudseeds.de" = dag.entryBefore ["*.cloudseeds.de"] { + hostname = "192.168.123.31"; + user = "root"; + }; + "*.cloudseeds.de" = { user = "norbert.melzer"; identityFile = "~/.ssh/cloudseeds"; @@ -152,17 +161,18 @@ in historyLimit = 10000; terminal = "screen-256color"; - plugins = let tp = pkgs.tmuxPlugins; in - [ - # { - # plugin = tp.dracula; - # extraConfig = '' - # set -g @dracula-show-battery true - # set -g @dracula-show-powerline true - # set -g @dracula-refresh-rate 10 - # ''; - # } - ]; + plugins = let + tp = pkgs.tmuxPlugins; + in [ + # { + # plugin = tp.dracula; + # extraConfig = '' + # set -g @dracula-show-battery true + # set -g @dracula-show-powerline true + # set -g @dracula-refresh-rate 10 + # ''; + # } + ]; }; zsh = { diff --git a/home/profiles/base/nix-completions.sh b/home/modules/profiles/base/nix-completions.sh similarity index 100% rename from home/profiles/base/nix-completions.sh rename to home/modules/profiles/base/nix-completions.sh diff --git a/home/profiles/base/p10k-config/p10k.zsh b/home/modules/profiles/base/p10k-config/p10k.zsh similarity index 100% rename from home/profiles/base/p10k-config/p10k.zsh rename to home/modules/profiles/base/p10k-config/p10k.zsh diff --git a/home/modules/profiles/browsing/default.nix b/home/modules/profiles/browsing/default.nix new file mode 100644 index 00000000..0c02c728 --- /dev/null +++ b/home/modules/profiles/browsing/default.nix @@ -0,0 +1,19 @@ +_: { + config, + lib, + pkgs, + ... +}: let + cfg = config.profiles.browsing; +in { + options.profiles.browsing = { + enable = + lib.mkEnableOption + "A profile that enables a browser for the GUI and the terminal"; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.config = {google-chrome = {enableWideVine = true;};}; + home.packages = with pkgs; [google-chrome lynx]; + }; +} diff --git a/home/modules/profiles/default.nix b/home/modules/profiles/default.nix new file mode 100644 index 00000000..3ac77e27 --- /dev/null +++ b/home/modules/profiles/default.nix @@ -0,0 +1,14 @@ +_: { + config, + lib, + ... +}: let + profileEnabler = let + reducer = l: r: {"${r}".enable = true;} // l; + in + builtins.foldl' reducer {} config.activeProfiles; +in { + options.activeProfiles = lib.mkOption {type = lib.types.listOf lib.types.str;}; + + config.profiles = profileEnabler; +} diff --git a/home/profiles/development/default.nix b/home/modules/profiles/development/default.nix similarity index 67% rename from home/profiles/development/default.nix rename to home/modules/profiles/development/default.nix index 90c8aa6e..ea7dc62d 100644 --- a/home/profiles/development/default.nix +++ b/home/modules/profiles/development/default.nix @@ -1,17 +1,21 @@ -{ config, pkgs, lib, ... }: -let cfg = config.profiles.development; - -in -{ +_: { + config, + pkgs, + lib, + ... +}: let + cfg = config.profiles.development; +in { options.profiles.development = { - enable = lib.mkEnableOption + enable = + lib.mkEnableOption "A profile that enables the system to be used for developing programs"; }; config = lib.mkIf cfg.enable { programs.emacs = { - extraPackages = ep: [ ep.magit ]; - extraConfig = '' + extraPackages = ep: [ep.magit]; + extraInit = '' ;; prepare magit use from shell (require 'magit) (global-git-commit-mode) @@ -29,8 +33,7 @@ in userEmail = "timmelzer@gmail.com"; aliases = { - graph = - "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold cyan)%h%C(reset) - %C(green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"; + graph = "log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold cyan)%h%C(reset) - %C(green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all"; co = "checkout"; br = "branch"; st = "status"; @@ -67,15 +70,17 @@ in "flycheck_*.py" ]; - includes = [{ - condition = "gitdir:~/cloudseeds/**"; - contents = { - init.defaultBranch = "master"; - user.email = "norbert.melzer@cloudseeds.de"; - }; - }]; + includes = [ + { + condition = "gitdir:~/cloudseeds/**"; + contents = { + init.defaultBranch = "master"; + user.email = "norbert.melzer@cloudseeds.de"; + }; + } + ]; }; - home.packages = [ pkgs.ripgrep ]; + home.packages = [pkgs.ripgrep]; }; } diff --git a/home/profiles/home-office/default.nix b/home/modules/profiles/home-office/default.nix similarity index 91% rename from home/profiles/home-office/default.nix rename to home/modules/profiles/home-office/default.nix index 7de750c1..e7384b3f 100644 --- a/home/profiles/home-office/default.nix +++ b/home/modules/profiles/home-office/default.nix @@ -1,10 +1,14 @@ -{ config, lib, pkgs, ... }: -let cfg = config.profiles.home-office; - -in -{ +_: { + config, + lib, + pkgs, + ... +}: let + cfg = config.profiles.home-office; +in { options.profiles.home-office = { - enable = lib.mkEnableOption + enable = + lib.mkEnableOption "A profile that enables remote desktop to the workingplace"; user = lib.mkOption { diff --git a/home/modules/advcp/default.nix b/home/modules/programs/advcp/default.nix similarity index 60% rename from home/modules/advcp/default.nix rename to home/modules/programs/advcp/default.nix index 917c166c..c7b50874 100644 --- a/home/modules/advcp/default.nix +++ b/home/modules/programs/advcp/default.nix @@ -1,14 +1,17 @@ -{ config, lib, pkgs, self, ... }: -let cfg = config.programs.advancedCopy; - -in -{ +{self, ...}: { + config, + lib, + pkgs, + ... +}: let + cfg = config.programs.advancedCopy; +in { options.programs.advancedCopy = { enable = lib.mkEnableOption "CP and MV with a progressbar"; }; config = lib.mkIf cfg.enable { - home.packages = [ self.advcp ]; + home.packages = [self.packages.x86_64-linux.advcp]; programs.zshell.aliases = { cp = "advcp -g"; diff --git a/home/modules/emacs/beacon.nix b/home/modules/programs/emacs/beacon.nix similarity index 70% rename from home/modules/emacs/beacon.nix rename to home/modules/programs/emacs/beacon.nix index 0514bec3..54d3abc9 100644 --- a/home/modules/emacs/beacon.nix +++ b/home/modules/programs/emacs/beacon.nix @@ -1,7 +1,10 @@ -{ config, lib, ... }: -let cfg = config.programs.emacs.packages.beacon; -in -{ +_: { + config, + lib, + ... +}: let + cfg = config.programs.emacs.packages.beacon; +in { options.programs.emacs.packages.beacon = { enable = lib.mkOption { type = lib.types.bool; @@ -15,14 +18,14 @@ in config = lib.mkIf cfg.enable { programs.emacs.localPackages."init-beacon" = { tag = "Setup beacon"; - comments = [ ]; - requires = [ ]; + comments = []; + requires = []; code = '' ;; enable the beacon minor mode globally. (beacon-mode 1) ''; }; - programs.emacs.extraPackages = ep: [ ep.beacon ]; + programs.emacs.extraPackages = ep: [ep.beacon]; }; } diff --git a/home/modules/emacs/company.nix b/home/modules/programs/emacs/company.nix similarity index 83% rename from home/modules/emacs/company.nix rename to home/modules/programs/emacs/company.nix index f5d12496..c35cfe26 100644 --- a/home/modules/emacs/company.nix +++ b/home/modules/programs/emacs/company.nix @@ -1,16 +1,19 @@ -{ config, lib, ... }: - -with lib; -let emacs = config.programs.emacs; -in -{ +_: { + config, + lib, + ... +}: +with lib; let + # emacs = config.programs.emacs; + inherit (config.programs) emacs; +in { config = lib.mkIf emacs.enable { - programs.emacs.extraPackages = ep: [ ep.company ]; + programs.emacs.extraPackages = ep: [ep.company]; programs.emacs.localPackages."init-company" = { tag = "Setup and initialise company"; - comments = [ ]; - requires = [ ]; + comments = []; + requires = []; code = '' ;; company (setq tab-always-indent 'complete) diff --git a/home/modules/emacs/default.nix b/home/modules/programs/emacs/default.nix similarity index 61% rename from home/modules/emacs/default.nix rename to home/modules/programs/emacs/default.nix index 27b19031..9835c6c7 100644 --- a/home/modules/emacs/default.nix +++ b/home/modules/programs/emacs/default.nix @@ -1,51 +1,48 @@ -{ config, lib, pkgs, ... }: -let +_: { + config, + lib, + pkgs, + ... +}: let emacsEnabled = config.programs.emacs.enable; cfg = config.programs.emacs; - bool2Lisp = b: if b then "t" else "nil"; - - confPackages = - let - fileContent = lib.attrsets.mapAttrs' - (k: v: { - name = "${k}"; - value = { - ep = v.packageRequires; - src = pkgs.nobbzLib.emacs.generatePackage k v.tag v.comments v.requires - v.code; - }; - }) - cfg.localPackages; - derivations = lib.attrsets.mapAttrs - (k: v: { - ep = v.ep; - src = pkgs.writeText "${k}.el" v.src; - }) - fileContent; - in + bool2Lisp = b: + if b + then "t" + else "nil"; + + confPackages = let + fileContent = + lib.attrsets.mapAttrs' + (k: v: { + name = "${k}"; + value = { + ep = v.packageRequires; + src = + config.lib.emacs.generatePackage k v.tag v.comments v.requires + v.code; + }; + }) + cfg.localPackages; + derivations = + lib.attrsets.mapAttrs + (k: v: { + # ep = v.ep; + inherit (v) ep; + src = pkgs.writeText "${k}.el" v.src; + }) + fileContent; + in derivations; - lispRequires = - let - names = lib.attrsets.mapAttrsToList (n: _: n) cfg.localPackages; - sorted = builtins.sort (l: r: l < r) names; - required = builtins.map (r: "(require '${r})") sorted; - in + lispRequires = let + names = lib.attrsets.mapAttrsToList (n: _: n) cfg.localPackages; + sorted = builtins.sort (l: r: l < r) names; + required = builtins.map (r: "(require '${r})") sorted; + in builtins.concatStringsSep "\n" required; - -in -{ - imports = [ - ./beacon.nix - ./company.nix - ./helm.nix - ./lsp.nix - ./projectile.nix - ./telephoneline.nix - ./whichkey - ]; - +in { options.programs.emacs = { splashScreen = lib.mkOption { type = lib.types.bool; @@ -57,21 +54,21 @@ in }; localPackages = lib.mkOption { - type = lib.types.attrsOf (lib.types.submodule ({ ... }: { + type = lib.types.attrsOf (lib.types.submodule (_: { options = { - tag = lib.mkOption { type = lib.types.str; }; - comments = lib.mkOption { type = lib.types.listOf lib.types.str; }; - requires = lib.mkOption { type = lib.types.listOf lib.types.str; }; - code = lib.mkOption { type = lib.types.str; }; + tag = lib.mkOption {type = lib.types.str;}; + comments = lib.mkOption {type = lib.types.listOf lib.types.str;}; + requires = lib.mkOption {type = lib.types.listOf lib.types.str;}; + code = lib.mkOption {type = lib.types.str;}; packageRequires = lib.mkOption { type = lib.types.unspecified; - default = _: [ ]; + default = _: []; }; }; })); }; - extraConfig = lib.mkOption { + extraInit = lib.mkOption { type = lib.types.lines; default = ""; description = '' @@ -81,12 +78,12 @@ in module = lib.mkOption { description = "Attribute set of modules to link into emacs configuration"; - default = { }; + default = {}; }; }; config = lib.mkIf emacsEnabled { - programs.emacs.extraConfig = '' + programs.emacs.extraInit = '' ;; adjust the load-path to find further down required files (add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) @@ -108,6 +105,8 @@ in ;; require all those local packages ${lispRequires} + (require 'pest-mode) + (add-to-list #'auto-mode-alist '("\\.pest\\'" . pest-mode)) (global-auto-revert-mode) (global-whitespace-mode) @@ -150,26 +149,30 @@ in ep.adoc-mode ep.hledger-mode ep.typescript-mode - + ep.earthfile-mode ep.ledger-mode + ep.pest-mode # ep.bazel-mode # (ep.trivialBuild { pname = "configuration"; src = confPackages; }) - ] ++ lib.attrsets.mapAttrsToList - (pname: v: - ep.trivialBuild { - inherit pname; - src = v.src; - packageRequires = v.ep ep; - }) - confPackages; + ] + ++ lib.attrsets.mapAttrsToList + (pname: v: + ep.trivialBuild { + inherit pname; + inherit (v) src; + # src = v.src; + packageRequires = v.ep ep; + }) + confPackages; home.file = { ".emacs.d/init.el" = { - text = pkgs.nobbzLib.emacs.generatePackage "init" - "Initialises emacs configuration" [ ] [ ] - cfg.extraConfig; + text = + config.lib.emacs.generatePackage "init" + "Initialises emacs configuration" [] [] + cfg.extraInit; }; }; }; diff --git a/home/modules/emacs/helm.nix b/home/modules/programs/emacs/helm.nix similarity index 79% rename from home/modules/emacs/helm.nix rename to home/modules/programs/emacs/helm.nix index d42118dd..3977de77 100644 --- a/home/modules/emacs/helm.nix +++ b/home/modules/programs/emacs/helm.nix @@ -1,14 +1,17 @@ -{ config, lib, ... }: -let emacsCfg = config.programs.emacs; -in -{ +_: { + config, + lib, + ... +}: let + emacsCfg = config.programs.emacs; +in { config = lib.mkIf emacsCfg.enable { programs.emacs = { localPackages."init-helm" = { tag = "Setup helm"; - comments = [ ]; - requires = [ "helm" ]; - packageRequires = ep: [ ep.helm ep.helm-rg ]; + comments = []; + requires = ["helm"]; + packageRequires = ep: [ep.helm ep.helm-rg]; code = '' ;; enable and configure auto resize (helm-autoresize-mode t) diff --git a/home/modules/programs/emacs/lib.nix b/home/modules/programs/emacs/lib.nix new file mode 100644 index 00000000..bd1fc8fe --- /dev/null +++ b/home/modules/programs/emacs/lib.nix @@ -0,0 +1,60 @@ +_: let + generatePackage = { + name, + tagLine, + commentLines, + requireList, + code, + }: let + prelude = generatePrelude {inherit name tagLine commentLines;}; + requires = generateRequires requireList; + postlude = generatePostlude name; + in '' + ${prelude} + + ${requires} + + ${code} + + ${postlude} + ''; + + generatePrelude = { + name, + tagLine, + commentLines, + }: let + generated = "This file is generated! DO NOT CHANGE!"; + comments = + builtins.concatStringsSep "\n" + (builtins.map (l: + if l == "" + then "" + else ";; ${l}") + ([generated] ++ commentLines)); + in '' + ;;; ${name} --- ${tagLine} + + ;;; Commentary: + + ${comments} + + ;;; Code: + ''; + + generatePostlude = name: '' + (provide '${name}) + ;;; ${name}.el ends here + ''; + + generateRequires = list: let + sorted = builtins.sort (l: r: l < r) list; + required = builtins.map (r: "(require '${r})") sorted; + in + builtins.concatStringsSep "\n" required; +in { + config.lib.emacs.generatePackage = name: tagLine: commentLines: requireList: code: + generatePackage { + inherit name code tagLine commentLines requireList; + }; +} diff --git a/home/modules/emacs/lsp.nix b/home/modules/programs/emacs/lsp.nix similarity index 76% rename from home/modules/emacs/lsp.nix rename to home/modules/programs/emacs/lsp.nix index 2edef0da..e9dc7cf9 100644 --- a/home/modules/emacs/lsp.nix +++ b/home/modules/programs/emacs/lsp.nix @@ -1,28 +1,28 @@ -{ config, lib, ... }: -let +_: { + config, + lib, + ... +}: let cfg = config.programs.emacs.lsp-mode; - mode-hooks = with lib; - let - sorted = builtins.sort (l: r: l < r) cfg.languages; - uni = unique sorted; - hooks = builtins.map (l: "'${l}-mode-hook") uni; - add-hooks = builtins.map (h: "(add-hook ${h} #'lsp)") hooks; - in + mode-hooks = with lib; let + sorted = builtins.sort (l: r: l < r) cfg.languages; + uni = unique sorted; + hooks = builtins.map (l: "'${l}-mode-hook") uni; + add-hooks = builtins.map (h: "(add-hook ${h} #'lsp)") hooks; + in builtins.concatStringsSep "\n" add-hooks; - -in -{ +in { options.programs.emacs.lsp-mode = { enable = lib.mkEnableOption "Enables and installs lsp-mode"; languages = lib.mkOption { type = lib.types.listOf lib.types.str; - default = [ ]; + default = []; description = '' The prefixes of the prog-mode that shall be handled through lsp-mode. ''; - example = [ "erlang" ]; + example = ["erlang"]; }; }; @@ -30,8 +30,8 @@ in programs.emacs = { localPackages."init-lsp" = { tag = "Setup and prepare the LSP mode"; - comments = [ ]; - requires = [ "lsp-mode" ]; + comments = []; + requires = ["lsp-mode"]; packageRequires = ep: [ # ep.company-lsp ep.helm-lsp diff --git a/home/modules/programs/emacs/polymode/default.nix b/home/modules/programs/emacs/polymode/default.nix new file mode 100644 index 00000000..af1fafd9 --- /dev/null +++ b/home/modules/programs/emacs/polymode/default.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + ... +}: +with lib; # TODO: long term remove this `with` + + let + inherit (config.programs) emacs; + in { + config = lib.mkIf emacs.enable { + programs.emacs.extraPackages = ep: [ep.polymode]; + + programs.emacs.localPackages."init-polymode" = { + tag = "Setup and initialise polymode"; + comments = []; + requires = []; + code = '' + ;; polymode + (add-to-list 'auto-mode-alist '("\\.nix$" . poly-nix-mode)) + + (define-hostmode poly-nix-hostmode :mode 'nix-mode) + + (define-innermode poly-elisp-expr-nix-innermode + :mode 'emacs-lisp-mode + :head-matcher (cons "'''\n\\( *;;.*\n\\)" 1) + :tail-matcher " *''';$" + :head-mode 'body + :tail-mode 'host) + + (define-polymode poly-nix-mode + :hostmode 'poly-nix-hostmode + :innermodes '(poly-elisp-expr-nix-innermode)) + ''; + }; + }; + } diff --git a/home/modules/emacs/projectile.nix b/home/modules/programs/emacs/projectile.nix similarity index 61% rename from home/modules/emacs/projectile.nix rename to home/modules/programs/emacs/projectile.nix index 15e47dc4..cc7365f2 100644 --- a/home/modules/emacs/projectile.nix +++ b/home/modules/programs/emacs/projectile.nix @@ -1,14 +1,17 @@ -{ config, lib, ... }: -let emacsCfg = config.programs.emacs; -in -{ +_: { + config, + lib, + ... +}: let + emacsCfg = config.programs.emacs; +in { config = lib.mkIf emacsCfg.enable { programs.emacs = { localPackages."init-projectile" = { tag = "Setup projectile"; - comments = [ ]; - requires = [ "projectile" "helm-projectile" "tramp" ]; - packageRequires = ep: [ ep.projectile ep.helm-projectile ]; + comments = []; + requires = ["projectile" "helm-projectile" "tramp"]; + packageRequires = ep: [ep.projectile ep.helm-projectile]; code = '' ;; enable projectile (projectile-mode t) diff --git a/home/modules/emacs/telephoneline.nix b/home/modules/programs/emacs/telephoneline.nix similarity index 83% rename from home/modules/emacs/telephoneline.nix rename to home/modules/programs/emacs/telephoneline.nix index dbaf7577..4b9cc2d0 100644 --- a/home/modules/emacs/telephoneline.nix +++ b/home/modules/programs/emacs/telephoneline.nix @@ -1,12 +1,15 @@ -{ config, lib, ... }: -let ecfg = config.programs.emacs; -in -{ +_: { + config, + lib, + ... +}: let + ecfg = config.programs.emacs; +in { config = lib.mkIf ecfg.enable { programs.emacs.localPackages."init-telephoneline" = { tag = "Setup telephone line"; - comments = [ ]; - requires = [ ]; + comments = []; + requires = []; code = '' ;; set up telephone line (setq-default @@ -23,6 +26,6 @@ in ''; }; - programs.emacs.extraPackages = ep: [ ep.telephone-line ]; + programs.emacs.extraPackages = ep: [ep.telephone-line]; }; } diff --git a/home/modules/emacs/whichkey/default.nix b/home/modules/programs/emacs/whichkey/default.nix similarity index 72% rename from home/modules/emacs/whichkey/default.nix rename to home/modules/programs/emacs/whichkey/default.nix index c5de1225..fba2ee95 100644 --- a/home/modules/emacs/whichkey/default.nix +++ b/home/modules/programs/emacs/whichkey/default.nix @@ -1,11 +1,13 @@ -{ config, lib, ... }: - -with lib; -let +_: { + config, + lib, + ... +}: +with lib; let cfg = config.programs.emacs.whichkey; enabled = config.programs.emacs.enable; - keyReplacementType = types.listOf (types.submodule ({ ... }: { + keyReplacementType = types.listOf (types.submodule (_: { options = { keys = lib.mkOption { type = types.str; @@ -22,13 +24,17 @@ let }; })); - replacements = lib.concatStringsSep "\n " - (builtins.map ({ keys, replace, ... }: ''"${keys}" "${replace}"'') - cfg.replacement); -in -{ + replacements = + lib.concatStringsSep "\n " + (builtins.map ({ + keys, + replace, + ... + }: ''"${keys}" "${replace}"'') + cfg.replacement); +in { options.programs.emacs.whichkey = { - replacement = lib.mkOption { type = keyReplacementType; }; + replacement = lib.mkOption {type = keyReplacementType;}; }; config = lib.mkIf enabled { @@ -47,11 +53,11 @@ in replace = "leave emacs"; } ]; - extraPackages = ep: [ ep.which-key ]; + extraPackages = ep: [ep.which-key]; localPackages."init-whichkey" = { tag = "Setup and initialise whichkey"; - comments = [ ]; - requires = [ ]; + comments = []; + requires = []; code = '' ;; which-key (which-key-mode t) diff --git a/home/modules/programs/exa/default.nix b/home/modules/programs/exa/default.nix new file mode 100644 index 00000000..bc2d56b7 --- /dev/null +++ b/home/modules/programs/exa/default.nix @@ -0,0 +1,16 @@ +_: { + config, + lib, + pkgs, + ... +}: let + cfg = config.programs.exa; +in { + config = lib.mkIf cfg.enable { + home.packages = [pkgs.exa]; + + programs.zshell.aliases = { + ll = "exa --header --git --classify --long --binary --group --time-style=long-iso --links --all --all --group-directories-first --sort=name"; + }; + }; +} diff --git a/home/modules/programs/nixpkgs/default.nix b/home/modules/programs/nixpkgs/default.nix new file mode 100644 index 00000000..15381d56 --- /dev/null +++ b/home/modules/programs/nixpkgs/default.nix @@ -0,0 +1,20 @@ +_: { + config, + lib, + ... +}: let + allowed = config.nixpkgs.allowedUnfree; +in { + options.nixpkgs.allowedUnfree = lib.mkOption { + type = lib.types.listOf lib.types.string; + default = []; + description = '' + Allows for unfree packages by their name. + ''; + }; + + config.nixpkgs.config.allowUnfreePredicate = + if (allowed == []) + then (_: false) + else (pkg: __elem (lib.getName pkg) allowed); +} diff --git a/home/modules/openshift/default.nix b/home/modules/programs/openshift/default.nix similarity index 70% rename from home/modules/openshift/default.nix rename to home/modules/programs/openshift/default.nix index db2ea7e0..47aab8c7 100644 --- a/home/modules/openshift/default.nix +++ b/home/modules/programs/openshift/default.nix @@ -1,15 +1,17 @@ -{ pkgs, lib, config, ... }: -let cfg = config.programs.openshift; - -in -{ +_: { + pkgs, + lib, + config, + ... +}: let + cfg = config.programs.openshift; +in { options.programs.openshift = { enable = lib.mkEnableOption "Tools to manage openshift instances"; }; config = lib.mkIf cfg.enable { - home.packages = - [ pkgs.sops pkgs.openshift (lib.setPrio 0 pkgs.kubectl) pkgs.kubernetes-helm ]; + home.packages = [pkgs.sops pkgs.openshift (lib.setPrio 0 pkgs.kubectl) pkgs.kubernetes-helm]; programs.zsh.initExtra = '' # Enable autocomplete for oc, kubectl and helm diff --git a/home/modules/zshell/default.nix b/home/modules/programs/zshell/default.nix similarity index 87% rename from home/modules/zshell/default.nix rename to home/modules/programs/zshell/default.nix index 514002aa..e6380401 100644 --- a/home/modules/zshell/default.nix +++ b/home/modules/programs/zshell/default.nix @@ -1,16 +1,19 @@ -{ config, lib, ... }: -let +_: { + config, + lib, + ... +}: let cfg = config.programs.zshell; - aliasesStr = lib.concatStringsSep "\n" + aliasesStr = + lib.concatStringsSep "\n" (lib.mapAttrsToList (k: v: "alias ${k}=${lib.escapeShellArg v}") cfg.aliases); sourcesStr = lib.concatStringsSep "\n" (builtins.map (s: ". ${s}") cfg.sources); -in -{ +in { options.programs.zshell = { aliases = lib.mkOption { - default = { }; + default = {}; example = { ll = "ls -l"; ".." = "cd .."; @@ -22,7 +25,7 @@ in type = lib.types.attrsOf lib.types.str; }; sources = lib.mkOption { - default = [ ]; + default = []; type = lib.types.listOf lib.types.str; }; }; diff --git a/home/modules/services/insync/default.nix b/home/modules/services/insync/default.nix new file mode 100644 index 00000000..a5497b77 --- /dev/null +++ b/home/modules/services/insync/default.nix @@ -0,0 +1,46 @@ +{self, ...}: { + config, + lib, + pkgs, + ... +}: let + cfg = config.services.insync; +in { + options.services.insync = { + enable = lib.mkEnableOption "Insync cloud sync tool"; + + package = lib.mkOption { + type = lib.types.package; + default = pkgs.insync; + description = '' + The insync package to use. + + It will get automatically added to 'allowedUnfree'. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + nixpkgs.allowedUnfree = ["insync"]; + + home.packages = [cfg.package]; + + systemd.user.services.insync = { + Unit = { + Description = "Insync - Google Drive, OneDrive, and Dropbox Syncing on Linux, Windows & Mac"; + After = ["graphical-session-pre.target"]; + PartOf = ["graphical-session.target"]; + }; + + Install = {WantedBy = ["graphical-session.target"];}; + + Service = { + Type = "simple"; + ExecStart = "${cfg.package}/bin/insync start --no-daemon"; + ExecStop = "${cfg.package}/bin/insync stop"; + Restart = "always"; + RestartSec = "5"; + }; + }; + }; +} diff --git a/home/modules/keyleds/default.nix b/home/modules/services/keyleds/default.nix similarity index 53% rename from home/modules/keyleds/default.nix rename to home/modules/services/keyleds/default.nix index 08ab887e..18b9457f 100644 --- a/home/modules/keyleds/default.nix +++ b/home/modules/services/keyleds/default.nix @@ -1,15 +1,20 @@ -{ config, lib, pkgs, self, ... }: -let +{self, ...}: { + config, + lib, + pkgs, + ... +}: let cfg = config.services.keyleds; -in -{ + self' = self.packages.x86_64-linux; +in { options.services.keyleds = { - enable = lib.mkEnableOption + enable = + lib.mkEnableOption "Logitech Keyboard animation for Linux — G410, G513, G610, G810, G910, GPro"; package = lib.mkOption { type = lib.types.package; - default = self.keyleds; + default = self'.keyleds; defaultText = lib.literalExample "pkgs.keyleds"; example = lib.literalExample "pkgs.keyleds"; description = '' @@ -19,22 +24,20 @@ in }; config = lib.mkIf cfg.enable { - home.packages = [ cfg.package ]; + home.packages = [cfg.package]; systemd.user.services.keyleds = { Unit = { - Description = - "Logitech Keyboard animation for Linux — G410, G513, G610, G810, G910, GPro"; - After = [ "graphical-session-pre.target" ]; - PartOf = [ "graphical-session.target" ]; + Description = "Logitech Keyboard animation for Linux — G410, G513, G610, G810, G910, GPro"; + After = ["graphical-session-pre.target"]; + PartOf = ["graphical-session.target"]; }; - Install = { WantedBy = [ "graphical-session.target" ]; }; + Install = {WantedBy = ["graphical-session.target"];}; Service = { Environment = "XDG_DATA_DIRS=${cfg.package}/share"; - ExecStart = - "${cfg.package}/bin/keyledsd --config ${cfg.package}/share/keyledsd/keyledsd.conf.sample"; + ExecStart = "${cfg.package}/bin/keyledsd --config ${cfg.package}/share/keyledsd/keyledsd.conf.sample"; Restart = "always"; RestartSec = 3; }; diff --git a/home/modules/services/restic/default.nix b/home/modules/services/restic/default.nix new file mode 100644 index 00000000..5f238446 --- /dev/null +++ b/home/modules/services/restic/default.nix @@ -0,0 +1,78 @@ +{self, ...}: { + config, + lib, + pkgs, + self, + ... +}: let + cfg = config.services.restic; + + bin = "${cfg.package}/bin/restic"; + excludes = __concatStringsSep " " (builtins.map (e: "--exclude=${e}") cfg.exclude); + xFlags = lib.optionalString cfg.oneFileSystem "-x"; + flags = "${xFlags} ${excludes}"; + + command = "${bin} --tag home -vv backup ${flags} %h"; +in { + options.services.restic = { + enable = lib.mkEnableOption "Restic Backup Tool"; + + package = lib.mkOption { + type = lib.types.package; + default = pkgs.restic; + description = "Restic derivation to use"; + }; + + exclude = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + description = "Corresponds to `--exclude`. Use `%h` instead of `~`"; + }; + + oneFileSystem = lib.mkOption { + type = lib.types.bool; + default = false; + description = "If true, exclude other file systems, don't cross filesystem boundaries and subvolumes"; + }; + + repo = lib.mkOption { + type = lib.types.str; + description = "Location of the repository"; + }; + + # TODO: Add options for inlcude, password file, etc + }; + + config = lib.mkIf cfg.enable { + home.packages = [cfg.package]; + + systemd.user.services.restic-backup = { + Unit = { + Description = "Restic Backup Tool"; + StartLimitIntervalSec = "25m"; + StartLimitBurst = "4"; + }; + + Service = { + Environment = [ + "PATH=${lib.makeBinPath [pkgs.openssh]}" + "RESTIC_PASSWORD_FILE=%h/.config/restic/password" + "RESTIC_REPOSITORY=${cfg.repo}" + ]; + Type = "oneshot"; + ExecStart = command; + Restart = "on-failure"; + RestartSec = "2m"; + }; + }; + + systemd.user.timers.restic-backup = { + Unit.Description = "Restic periodic backup"; + Timer = { + Unit = "restic-backup.service"; + OnCalendar = "*:0/15"; + }; + Install.WantedBy = ["timers.target"]; + }; + }; +} diff --git a/home/nix/default.nix b/home/nix/default.nix deleted file mode 100644 index 9a3ec07b..00000000 --- a/home/nix/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -let sources = import ./sources.nix { }; - -in -[ - (_: _: { inherit sources; }) - (import sources.mozilla-overlay.outPath) - (import sources.emacs-overlay.outPath) - (import ./myOverlay) -] diff --git a/home/nix/myOverlay/default.nix b/home/nix/myOverlay/default.nix deleted file mode 100644 index 032222ba..00000000 --- a/home/nix/myOverlay/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -final: prev: -let - keepasspkgs = final.fetchFromGitHub { - owner = "wnklmnn"; - repo = "nixpkgs"; - rev = "e1bcd10a071ef746e1078272913048b1eef4ceee"; - sha256 = "03bd52y51xr6fhy3r8xggq84z39p94mhipw6xyjnm1niq7iim7cw"; - }; -in -rec { - nix-zsh-completions = prev.nix-zsh-completions.overrideAttrs (_: { - version = "overlay"; - src = final.fetchFromGitHub { - owner = "Ma27"; - repo = "nix-zsh-completions"; - rev = "939c48c182e9d018eaea902b1ee9d00a415dba86"; - sha256 = "sha256-3HVYez/wt7EP8+TlhTppm968Wl8x5dXuGU0P+8xNDpo="; - }; - }); - - # keepass = - # final.callPackage "${keepasspkgs}/pkgs/applications/misc/keepass" { }; - - nobbzLib = (import ./lib); -} diff --git a/home/nix/myOverlay/lib/default.nix b/home/nix/myOverlay/lib/default.nix deleted file mode 100644 index 4f263037..00000000 --- a/home/nix/myOverlay/lib/default.nix +++ /dev/null @@ -1,53 +0,0 @@ -let - generatePackage = { name, tagLine, commentLines, requireList, code }: - let - prelude = generatePrelude { inherit name tagLine commentLines; }; - requires = generateRequires requireList; - postlude = generatePostlude name; - in - '' - ${prelude} - - ${requires} - - ${code} - - ${postlude} - ''; - - generatePrelude = { name, tagLine, commentLines }: - let - generated = "This file is generated! DO NOT CHANGE!"; - comments = builtins.concatStringsSep "\n" - (builtins.map (l: if l == "" then "" else ";; ${l}") - ([ generated ] ++ commentLines)); - in - '' - ;;; ${name} --- ${tagLine} - - ;;; Commentary: - - ${comments} - - ;;; Code: - ''; - - generatePostlude = name: '' - (provide '${name}) - ;;; ${name}.el ends here - ''; - - generateRequires = list: - let - sorted = builtins.sort (l: r: l < r) list; - required = builtins.map (r: "(require '${r})") sorted; - in - builtins.concatStringsSep "\n" required; - -in -{ - emacs.generatePackage = name: tagLine: commentLines: requireList: code: - generatePackage { - inherit name code tagLine commentLines requireList; - }; -} diff --git a/home/overlays.nix b/home/overlays.nix deleted file mode 100644 index 45a04a8b..00000000 --- a/home/overlays.nix +++ /dev/null @@ -1,13 +0,0 @@ -let - compat = import (builtins.fetchTarball "https://github.com/edolstra/flake-compat/archive/99f1c21.tar.gz"); - - self = (compat { src = ./.; }).defaultNix; - - overlay = self.overlay; - overlays = self.overlays; -in -[ - overlay - overlays.inputs - overlays.emacs -] diff --git a/home/packages/advcp/default.nix b/home/packages/advcp/default.nix deleted file mode 100644 index 25f7b124..00000000 --- a/home/packages/advcp/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ stdenv, fetchurl, fetchpatch, ... }: -let upstream = "coreutils"; -in -stdenv.mkDerivation rec { - name = "advcp"; - version = "8.30"; - - src = fetchurl { - name = "source-${name}-${version}.tar.xz"; - url = "ftp://ftp.gnu.org/gnu/${upstream}/${upstream}-${version}.tar.xz"; - sha256 = "0mxhw43d4wpqmvg0l4znk1vm10fy92biyh90lzdnqjcic2lb6cg8"; - }; - - patches = [ - (fetchpatch { - url = - "https://github.com/mrdrogdrog/advcpmv/raw/496bcc9f1e8a13768066c353c238a475ccb91329/advcpmv-0.8-8.30.patch"; - sha256 = "0mw0ramg4ydqdqs33kw9m0rjvw5fvfa0scsq753pn7biwx6gx9hx"; - }) - ]; - - installPhase = '' - install -D src/cp $out/bin/advcp - install -D src/mv $out/bin/advmv - ''; -} diff --git a/home/packages/elixir-lsp/default.nix b/home/packages/elixir-lsp/default.nix deleted file mode 100644 index 0cb8b767..00000000 --- a/home/packages/elixir-lsp/default.nix +++ /dev/null @@ -1,55 +0,0 @@ -{ stdenv, erlang, elixir, rebar3, hex, callPackage, git, cacert, fetchFromGitHub }: -let - fetchMixDeps = callPackage ./fetch-mix-deps.nix { inherit rebar3; }; - - source = builtins.fromJSON (builtins.readFile ./source.json); -in -stdenv.mkDerivation rec { - name = "elixir-ls"; - version = "${source.version}-${erlang.version}-${elixir.version}"; - - nativeBuildInputs = [ elixir hex git deps cacert ]; - - deps = fetchMixDeps { - name = "${name}-${version}"; - inherit src; - sha256 = "sha256-1SgqSBMtQb653qKKXXFMmNfYKOqEmXL6mbvjJJi2zLo="; - }; - - src = fetchFromGitHub rec { - name = "source-${owner}-${repo}-${version}"; - inherit (source) owner repo rev sha256; - }; - - dontStrip = true; - - configurePhase = '' - export MIX_ENV=prod - export HEX_OFFLINE=1 - export HEX_HOME="$PWD/hex" - export MIX_HOME="$PWD" - export MIX_REBAR3="${rebar3}/bin/rebar3" - export REBAR_GLOBAL_CONFIG_DIR="$PWD/rebar3" - export REBAR_CACHE_DIR="$PWD/rebar3.cache" - cp --no-preserve=all -R ${deps} deps - mix deps.compile --no-deps-check - ''; - - buildPhase = '' - mix do compile --no-deps-check, elixir_ls.release - ''; - - installPhase = '' - mkdir -p $out/bin - cp -Rv release $out/lib - # Prepare the wrapper script - substitute release/language_server.sh $out/bin/elixir-ls \ - --replace 'exec "''${dir}/launch.sh"' "exec $out/lib/launch.sh" - chmod +x $out/bin/elixir-ls - # prepare the launcher - substituteInPlace $out/lib/launch.sh \ - --replace "elixir" "${elixir}/bin/elixir" \ - --replace "ERL_LIBS=\"\$SCRIPTPATH:\$ERL_LIBS\"" \ - "ERL_LIBS=$out/lib:\$ERL_LIBS" - ''; -} diff --git a/home/packages/elixir-lsp/source.json b/home/packages/elixir-lsp/source.json deleted file mode 100644 index 860bf17d..00000000 --- a/home/packages/elixir-lsp/source.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "fetchSubmodules": true, - "owner": "elixir-lsp", - "repo": "elixir-ls", - "rev": "f9ca65e05f13985c0a6270e6b9f4166f18a1357c", - "sha256": "+iwThFqiGQgh5APFlh2OPSclqq1B/I1QvVM6WAbDEDQ=", - "version": "0.7.0" -} diff --git a/home/packages/erlang-ls/default.nix b/home/packages/erlang-ls/default.nix deleted file mode 100644 index 4c468309..00000000 --- a/home/packages/erlang-ls/default.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ stdenv, erlang, rebar3, lib, rebar3Relx, fetchFromGitHub, git, cacert }: -let - source = builtins.fromJSON (builtins.readFile ./source.json); - - fetchRebar3Deps = - { name, version, sha256, src, meta ? { } }: - - stdenv.mkDerivation ({ - name = "rebar-deps-${name}-${version}"; - - buildInputs = [ git cacert ]; - - phases = [ "downloadPhase" "installPhase" ]; - - downloadPhase = '' - cp ${src} . - HOME='.' DEBUG=1 ${rebar3}/bin/rebar3 get-deps - ''; - - installPhase = '' - mkdir -p "$out/_checkouts" - for i in ./_build/default/lib/* ; do - echo "$i" - rm -rf "$i"/.git - cp -R "$i" "$out/_checkouts" - done - ''; - - outputHashAlgo = "sha256"; - outputHashMode = "recursive"; - outputHash = sha256; - - # impureEnvVars = lib.fetchers.proxyImpureEnvVars; - inherit meta; - }); -in -rebar3Relx rec { - pname = "erlang-ls"; - version = "${source.version}-${erlang.version}"; - releaseType = "escript"; - - checkouts = fetchRebar3Deps { - inherit version; - name = pname; - src = "${src}/rebar.lock"; - sha256 = "sha256-nm3e5DfehSCjjTPADSzohilOBFW4QiXnokwVNrpDZ1E="; - }; - - postPatch = '' - substituteInPlace apps/els_lsp/src/els_lsp.app.src \ - --replace '{vsn, git}' '{vsn, "${version}"}' - ''; - - src = fetchFromGitHub { - name = "source-${pname}-${version}"; - inherit (source) owner repo rev sha256; - }; -} diff --git a/home/packages/erlang-ls/source.json b/home/packages/erlang-ls/source.json deleted file mode 100644 index 283d44b4..00000000 --- a/home/packages/erlang-ls/source.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "fetchSubmodules": true, - "owner": "erlang-ls", - "repo": "erlang_ls", - "rev": "0.17.0", - "sha256": "sha256-XCXZ6+dcfgrHXgQx6Qa3NqosXP2NJKgB8puZQTpM72s=", - "version": "0.17.0" -} diff --git a/home/packages/kmymoney-de/default.nix b/home/packages/kmymoney-de/default.nix deleted file mode 100644 index dd754ef5..00000000 --- a/home/packages/kmymoney-de/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ runCommand, makeWrapper, kmymoney }: - -runCommand "kmymoney-de-${kmymoney.version}" -{ - nativeBuildInputs = [ makeWrapper ]; -} '' - mkdir -p $out/{bin,share/applications} - makeWrapper ${kmymoney}/bin/kmymoney $out/bin/kmymoney \ - --set LANG de_DE.UTF-8 - ln -s ${kmymoney}/share/applications/org.kde.kmymoney.desktop $out/share/applications/org.kde.kmymoney.desktop -'' diff --git a/home/packages/rofi-unicode/default.nix b/home/packages/rofi-unicode/default.nix deleted file mode 100644 index d63a7183..00000000 --- a/home/packages/rofi-unicode/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ stdenvNoCC, xsel, fetchgit }: -let - source = builtins.fromJSON (builtins.readFile ./rofi-unicode.json); -in -stdenvNoCC.mkDerivation rec { - pname = "rofiemoji-rofiunicode"; - version = "${source.rev}"; - - src = fetchgit { - inherit (source) rev url sha256; - }; - - installPhase = '' - mkdir -pv $out/{bin,lists} - - install -v lists/* $out/lists - install -v *.sh $out/bin - ''; - - postFixup = '' - for f in $out/bin/*.sh; do - substituteInPlace $f \ - --replace 'DIR="$HOME/.config/rofiemoji-rofiunicode/lists"' \ - 'DIR="${placeholder "out"}/lists"' \ - --replace 'xsel' '${xsel}/bin/xsel' - done; - ''; -} diff --git a/home/profiles/browsing/default.nix b/home/profiles/browsing/default.nix deleted file mode 100644 index 44f1448d..00000000 --- a/home/profiles/browsing/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, lib, pkgs, ... }: -let cfg = config.profiles.browsing; - -in -{ - options.profiles.browsing = { - enable = lib.mkEnableOption - "A profile that enables a browser for the GUI and the terminal"; - }; - - config = lib.mkIf cfg.enable { - nixpkgs.config = { google-chrome = { enableWideVine = true; }; }; - home.packages = with pkgs; [ google-chrome lynx ]; - }; -} diff --git a/home/profiles/default.nix b/home/profiles/default.nix deleted file mode 100644 index fffe2b09..00000000 --- a/home/profiles/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, lib, ... }: -let - profileEnabler = - let - reducer = l: r: { "${r}".enable = true; } // l; - in - builtins.foldl' reducer { } config.activeProfiles; -in -{ - imports = [ ./base ./browsing ./development ./home-office ]; - - options.activeProfiles = lib.mkOption { type = lib.types.listOf lib.types.str; }; - - config.profiles = profileEnabler; -} diff --git a/home/scripts/build-config/default.nix b/home/scripts/build-config/default.nix deleted file mode 100644 index 6f5c7128..00000000 --- a/home/scripts/build-config/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ writeShellScript, nettools, ... }: - -writeShellScript "build-config.sh" '' - set -ex - - if [ -z $1 ]; then - name=$(${nettools}/bin/hostname) - else - name=$1 - fi - - nix build -L --out-link "result-$name" ".#$name" -'' diff --git a/home/scripts/bump-version/default.nix b/home/scripts/bump-version/default.nix deleted file mode 100644 index 3ce22e90..00000000 --- a/home/scripts/bump-version/default.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ writeScript, python3, nix-prefetch-github, nix-prefetch-git, ... }: - -writeScript "bump-version.py" '' - #!${python3}/bin/python - - import json - import re - import subprocess - from sys import argv - - version = { - "elixir-ls": "v0.7.0", - "erlang-ls": "0.13.0", - "emoji": "master", - } - - location = { - "elixir-ls": "packages/elixir-lsp/source.json", - "erlang-ls": "packages/erlang-ls/source.json", - "emoji": "packages/rofi-unicode/rofi-unicode.json", - } - - repo_url = { - "elixir-ls": ("elixir-lsp", "elixir-ls"), - "erlang-ls": ("erlang-ls", "erlang_ls"), - "emoji": "https://git.teknik.io/matf/rofiemoji-rofiunicode.git", - } - - def github(name, rev, file): - bin = "${nix-prefetch-github}/bin/nix-prefetch-github" - owner, repo = repo_url[name] - data = json.loads(subprocess.check_output([bin, "--rev", rev, owner, repo])) - data["version"] = re.sub("^v", "", rev) - with open(file, "w") as f: - json.dump(data, f, indent=2, sort_keys=True) - f.write("\n") - - def git(name, rev, file): - bin = "${nix-prefetch-git}/bin/nix-prefetch-git" - url = repo_url[name] - data = json.loads(subprocess.check_output([bin, url])) - data["version"] = re.sub("^v", "", rev) - with open(file, "w") as f: - json.dump(data, f, indent=2, sort_keys=True) - f.write("\n") - - fetcher = { - "elixir-ls": github, - "erlang-ls": github, - "emoji": git, - } - - name = argv[1] - - fetcher[name](name, version[name], location[name]) -'' diff --git a/home/scripts/switch-config/default.nix b/home/scripts/switch-config/default.nix deleted file mode 100644 index bbffc5b2..00000000 --- a/home/scripts/switch-config/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ writeShellScript, nixUnstable, nettools, ... }: - -writeShellScript "switch-config.sh" '' - set -ex - - name="" - user="$USER" - targetHost="" - - while (( $# > 0 )); do - i=$1; shift 1 - - case "$i" in - --targetHost) - targetHost=$1; shift 1 - ;; - - --name) - name=$1; shift 1 - ;; - - --user) - user=$1; shift 1 - ;; - esac - done - - if [ -z "$name" ]; then - if [ -z "$targetHost" ]; then - name=$(${nettools}/bin/hostname) - else - printf "--name needs to be specified" - exit - fi - fi - - outLink=$(mktemp -d)/result-$name - - ${nixUnstable}/bin/nix build -L \ - --out-link "$outLink" \ - ".#$name" - - if [ -z "$targetHost" ]; then - $outLink/activate - else - storePath=$(readlink "$outLink") - nix copy --to "ssh://root@$targetHost" "$storePath" - ssh "$user@$targetHost" "$storePath/activate" - fi - - rm $outLink -'' diff --git a/home/scripts/update-config/default.nix b/home/scripts/update-config/default.nix deleted file mode 100644 index b93edcae..00000000 --- a/home/scripts/update-config/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ writeShellScript, lib, inputs, nixUnstable, ... }: -let - hostNames = builtins.attrNames inputs.self.homeConfigurations; - hostNamesBash = builtins.map (n: ".#${n}") hostNames; - hostNamesArray = "(${lib.escapeShellArgs hostNamesBash})"; -in -writeShellScript "update-config.sh" '' - set -ex - ${nixUnstable}/bin/nix flake update --recreate-lock-file --commit-lock-file - - hosts=${hostNamesArray} - - ${nixUnstable}/bin/nix build -L "''${hosts[@]}" -'' diff --git a/lefthook.yml b/lefthook.yml index 2a636efe..b64c5253 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -3,4 +3,11 @@ pre-commit: commands: formatting: glob: "*.nix" - run: nixpkgs-fmt --check {all_files} + run: nix shell --inputs-from . alejandra -c alejandra --check {all_files} + +statix: + parallel: false + commands: + statix: + glob: "*.nix" + run: statix check -i packages/nodePackages/node-env.nix nixos/modules/grafana.nix \ No newline at end of file diff --git a/lib/default.nix b/lib/default.nix index eb90c332..390f0f13 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,5 +1,6 @@ -inputs: - -{ - mkHomeConfig = import ./mk_home_config.nix inputs; +inputs: { + mkSystem = import ./mk_system.nix inputs; + mkHome = import ./mk_home.nix inputs; + nixosConfigurationsAsPackages = import ./nixos_configurations_as_packages.nix inputs; + homeConfigurationsAsPackages = import ./home_configurations_as_packages.nix inputs; } diff --git a/lib/home_configurations_as_packages.nix b/lib/home_configurations_as_packages.nix new file mode 100644 index 00000000..78315a68 --- /dev/null +++ b/lib/home_configurations_as_packages.nix @@ -0,0 +1,14 @@ +{self, ...} @ inputs: let + pkgs = inputs.nixpkgs-2105.legacyPackages.x86_64-linux; + + inherit (pkgs.lib) genAttrs mapAttrs'; + + hostNames = __attrNames self.homeConfigurations; + attrHostNames = genAttrs hostNames (name: "home/config/${name}"); + configs = + mapAttrs' (name: pname: { + name = pname; + value = self.homeConfigurations.${name}.activationPackage; + }) + attrHostNames; +in {x86_64-linux = configs;} diff --git a/lib/mk_home.nix b/lib/mk_home.nix new file mode 100644 index 00000000..79ed52c2 --- /dev/null +++ b/lib/mk_home.nix @@ -0,0 +1,22 @@ +{ + home-manager, + self, + ... +} @ inputs: username: hostname: system: nixpkgs: let + args = inputs; + entrypoint = import "${self}/home/configurations/${username}@${hostname}.nix" inputs; +in + home-manager.lib.homeManagerConfiguration { + inherit username system; + homeDirectory = "/home/${username}"; + + pkgs = nixpkgs.legacyPackages.${system}; + + configuration = {lib, ...}: { + imports = + [ + entrypoint + ] + ++ __attrValues self.homeModules; + }; + } diff --git a/lib/mk_home_config.nix b/lib/mk_home_config.nix deleted file mode 100644 index b9204925..00000000 --- a/lib/mk_home_config.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ home-manager, ... }@inputs: - -username: entrypoint: -let - system = "x86_64-linux"; - - args = { - stable = inputs.nixpkgs-2105.legacyPackages.${system}; - unstable = inputs.unstable.legacyPackages.${system}; - self = inputs.self.packages.${system}; - inherit inputs; - }; -in -home-manager.lib.homeManagerConfiguration { - inherit username system; - homeDirectory = "/home/${username}"; - configuration = { lib, ... }: { - _module = { inherit args; }; - nixpkgs.overlays = builtins.attrValues inputs.self.overlays; - nixpkgs.config.allowUnfreePredicate = (pkg: builtins.elem (lib.getName pkg) [ - "insync" - "teamspeak-client" - "google-chrome" - "steam" - "steam-original" - "steam-runtime" - ]); - imports = inputs.self.homeModules.all-modules ++ [ - ../home/profiles - ../home/home.nix - entrypoint - ]; - }; -} diff --git a/lib/mk_system.nix b/lib/mk_system.nix new file mode 100644 index 00000000..1c225429 --- /dev/null +++ b/lib/mk_system.nix @@ -0,0 +1,31 @@ +{self, ...} @ inputs: name: nixpkgs: +nixpkgs.lib.nixosSystem ( + let + configFolder = "${self}/nixos/configurations"; + entryPoint = import "${configFolder}/${name}.nix" inputs; + bootloader = "${configFolder}/bootloader/${name}.nix"; + hardware = "${configFolder}/hardware/${name}.nix"; + in { + system = "x86_64-linux"; + + modules = + [ + { + boot.cleanTmpDir = true; + networking.hostName = name; + nix.flakes.enable = true; + system.configurationRevision = self.rev or "dirty"; + documentation.man = { + enable = true; + generateCaches = true; + }; + services.nixos-vscode-server.enable = true; + } + entryPoint + bootloader + hardware + inputs.nixos-vscode-server.nixosModules.system + ] + ++ __attrValues self.nixosModules; + } +) diff --git a/lib/nixos_configurations_as_packages.nix b/lib/nixos_configurations_as_packages.nix new file mode 100644 index 00000000..7d38b60f --- /dev/null +++ b/lib/nixos_configurations_as_packages.nix @@ -0,0 +1,14 @@ +{self, ...} @ inputs: let + pkgs = inputs.nixpkgs-2105.legacyPackages.x86_64-linux; + + inherit (pkgs.lib) genAttrs mapAttrs'; + + hostNames = __attrNames self.nixosConfigurations; + attrHostNames = genAttrs hostNames (name: "nixos/config/${name}"); + configs = + mapAttrs' (name: pname: { + name = pname; + value = self.nixosConfigurations.${name}.config.system.build.toplevel; + }) + attrHostNames; +in {x86_64-linux = configs;} diff --git a/nixos/configurations/bootloader/enceladeus.nix b/nixos/configurations/bootloader/enceladeus.nix new file mode 100644 index 00000000..df11b8de --- /dev/null +++ b/nixos/configurations/bootloader/enceladeus.nix @@ -0,0 +1,12 @@ +{ + # Use the GRUB 2 boot loader. + boot.loader.grub.enable = true; + boot.loader.grub.version = 2; + boot.loader.grub.useOSProber = false; + + # boot.loader.grub.efiSupport = true; + # boot.loader.grub.efiInstallAsRemovable = true; + # boot.loader.efi.efiSysMountPoint = "/boot/efi"; + # Define on which hard drive you want to install Grub. + boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only +} diff --git a/nixos/configurations/bootloader/mimas.nix b/nixos/configurations/bootloader/mimas.nix new file mode 100644 index 00000000..d39e4ca6 --- /dev/null +++ b/nixos/configurations/bootloader/mimas.nix @@ -0,0 +1,4 @@ +{ + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; +} diff --git a/nixos/configurations/bootloader/thetys.nix b/nixos/configurations/bootloader/thetys.nix new file mode 100644 index 00000000..cb933a07 --- /dev/null +++ b/nixos/configurations/bootloader/thetys.nix @@ -0,0 +1,2 @@ +# Thetys' bootloader configuration is done by upstream VBox OVA module +{} diff --git a/nixos/configurations/default.nix b/nixos/configurations/default.nix new file mode 100644 index 00000000..5cb7e5fa --- /dev/null +++ b/nixos/configurations/default.nix @@ -0,0 +1,5 @@ +{self, ...} @ inputs: { + mimas = self.lib.mkSystem "mimas" inputs.unstable; # nixpkgs-2105; + enceladeus = self.lib.mkSystem "enceladeus" inputs.unstable; + thetys = self.lib.mkSystem "thetys" inputs.unstable; +} diff --git a/nixos/configurations/enceladeus.nix b/nixos/configurations/enceladeus.nix new file mode 100644 index 00000000..a2b49837 --- /dev/null +++ b/nixos/configurations/enceladeus.nix @@ -0,0 +1,163 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). +_: { + config, + pkgs, + lib, + ... +}: { + nix.allowedUnfree = ["b43-firmware" "broadcom-sta" "zerotierone"]; + nixpkgs.config.contentAddressedByDefault = false; + + # nix.useSandbox = false; + nix.package = pkgs.nix_2_4; + + boot.blacklistedKernelModules = ["rtl8xxxu"]; + boot.extraModulePackages = with config.boot.kernelPackages; [ + rtl8192eu + ]; + + # boot.kernelPackages = pkgs.linuxPackages_4_19; + boot.kernel.sysctl = { + "vm.swappiness" = 75; + }; + + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # The global useDHCP flag is deprecated, therefore explicitly set to false here. + # Per-interface useDHCP will be mandatory in the future, so this generated config + # replicates the default behaviour. + networking.networkmanager.enable = true; + networking.networkmanager.unmanaged = [ + "mac:0c:60:76:3f:c1:31" + ]; + networking.enableB43Firmware = true; + + networking.useDHCP = false; + networking.interfaces.enp0s25.useDHCP = false; + networking.interfaces.wlan0.useDHCP = false; + networking.hostId = "62a007d6"; # required by ZFS + + # hardware.opengl.driSupport32Bit = true; + # hardware.pulseaudio.support32Bit = true; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + console = { + font = "Lat2-Terminus16"; + keyMap = "de"; + }; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + wget + rsync + git + firefox + ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; + programs.zsh.enable = true; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh.enable = true; + + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [9002]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + networking.firewall.trustedInterfaces = [ + "ztrta4jrxj" + ]; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable sound. + sound.enable = true; + hardware.pulseaudio.enable = true; + + # Enable the X11 windowing system. + services.xserver.enable = true; + services.xserver.layout = "de"; + # services.xserver.xkbOptions = "eurosign:e"; + + # Enable touchpad support. + # services.xserver.libinput.enable = true; + + # Enable the KDE Desktop Environment. + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.plasma5.enable = false; + services.xserver.windowManager.awesome.enable = true; + + # services.kbfs.enable = true; + # services.keybase.enable = true; + + virtualisation = { + docker = { + enable = false; + }; + + # virtualbox.host.enable = true; + }; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users = { + nmelzer = { + isNormalUser = true; + shell = pkgs.zsh; + extraGroups = ["wheel" "networkmanager" "adbusers"]; # Enable ‘sudo’ for the user. + }; + aroemer = { + isNormalUser = true; + }; + proemer = { + isNormalUser = true; + }; + }; + + services.prometheus = { + exporters = { + node = { + enable = true; + enabledCollectors = ["systemd"]; + port = 9002; + }; + }; + }; + + # This value determines the NixOS release with which your system is to be + # compatible, in order to avoid breaking some software such as database + # servers. You should change this only after NixOS release notes say you + # should. + system.stateVersion = "19.09"; # Did you read the comment? + + hardware.keyboard.zsa.enable = true; + + security.sudo.extraRules = [ + { + commands = [ + { + command = "/run/current-system/sw/bin/nixos-rebuild"; + options = ["NOPASSWD"]; + } + ]; + groups = ["wheel"]; + } + ]; +} diff --git a/nixos/configurations/hardware/enceladeus.nix b/nixos/configurations/hardware/enceladeus.nix new file mode 100644 index 00000000..33164e9f --- /dev/null +++ b/nixos/configurations/hardware/enceladeus.nix @@ -0,0 +1,41 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + ... +}: { + imports = []; + + boot.initrd.availableKernelModules = ["uhci_hcd" "ehci_pci" "ahci" "firewire_ohci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "sdhci_pci"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-intel" "wl"]; + boot.extraModulePackages = [config.boot.kernelPackages.broadcom_sta]; + boot.supportedFilesystems = ["ntfs-3g"]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/1be71104-48ad-40c3-bf4c-086cd887969f"; + fsType = "ext4"; + }; + + fileSystems."/nix/store" = { + device = "/dev/disk/by-uuid/1ee9d669-07e1-4f40-93af-71f9ad999f70"; + fsType = "ext4"; + }; + + fileSystems."/home" = { + device = "/dev/disk/by-uuid/53a36eeb-9f0e-4cb6-bdd9-53ae5a74c683"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/sda1"; + fsType = "ext4"; + }; + + swapDevices = [{device = "/dev/disk/by-uuid/87c5fea1-6bcb-41d4-af9d-b9342a45c9b3";}]; + + nix.settings.max-jobs = lib.mkDefault 1; +} diff --git a/nixos/configurations/hardware/mimas.nix b/nixos/configurations/hardware/mimas.nix new file mode 100644 index 00000000..cc2812a0 --- /dev/null +++ b/nixos/configurations/hardware/mimas.nix @@ -0,0 +1,83 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + ... +}: { + imports = []; + + boot.initrd.availableKernelModules = ["xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "rtsx_pci_sdmmc"]; + boot.initrd.kernelModules = ["dm-snapshot" "i915"]; + boot.kernelModules = ["kvm-intel"]; + boot.kernelParams = ["intel_pstate=active"]; + boot.extraModulePackages = []; + boot.supportedFilesystems = ["ntfs" "exfat" "avfs"]; + + hardware.cpu.intel.updateMicrocode = true; + hardware.enableRedistributableFirmware = true; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/440c8ce1-1799-4239-936f-a54c879941a5"; + fsType = "ext4"; + }; + + fileSystems."/home" = { + device = "/dev/disk/by-uuid/8119ca17-576f-49a2-9496-946d6759a59b"; + fsType = "ext4"; + }; + + fileSystems."/nix" = { + device = "/dev/disk/by-uuid/48574e4d-3a82-4b04-ac28-d55c32fa3aff"; + fsType = "ext4"; + }; + + fileSystems."/var/lib/docker" = { + device = "/dev/disk/by-uuid/5da6b8c1-2598-48f1-9541-49c50e95aac9"; + fsType = "ext4"; + }; + + fileSystems."/var/lib/grafana" = { + device = "/dev/disk/by-uuid/c6294dc0-f2cb-432b-a993-02d21855732c"; + fsType = "ext4"; + }; + + fileSystems."/var/lib/prometheus2" = { + device = "/dev/disk/by-uuid/3ec5c5b2-d7cd-4b59-bb6b-d1fc40100662"; + fsType = "ext4"; + }; + + fileSystems."/var/lib/paperless" = { + device = "/dev/disk/by-label/paperless"; + fsType = "ext4"; + }; + + # fileSystems."/var/lib/restic" = { + # device = "/dev/disk/by-uuid/3eb6492a-b126-4ad5-b9df-4eb47df1135c"; + # fsType = "ext4"; + # }; + + # fileSystems."/var/lib/ums" = { + # device = "/dev/disk/by-label/ums"; + # fsType = "ext4"; + # }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/7000-3A85"; + fsType = "vfat"; + }; + + swapDevices = []; + + nix.settings.max-jobs = lib.mkDefault 4; + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; + + hardware.opengl.extraPackages = with pkgs; [ + vaapiIntel + vaapiVdpau + libvdpau-va-gl + intel-media-driver + ]; +} diff --git a/nixos/hosts/hardware/nixos.nix b/nixos/configurations/hardware/thetys.nix similarity index 52% rename from nixos/hosts/hardware/nixos.nix rename to nixos/configurations/hardware/thetys.nix index 67620f34..d06b7fa6 100644 --- a/nixos/hosts/hardware/nixos.nix +++ b/nixos/configurations/hardware/thetys.nix @@ -1,17 +1,23 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, ... }: - { - imports = [ ]; + config, + lib, + pkgs, + ... +}: { + imports = []; - boot.initrd.availableKernelModules = [ "ohci_pci" "ahci" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ ]; - boot.extraModulePackages = [ ]; + boot.initrd.availableKernelModules = ["ohci_pci" "ahci" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = []; + boot.extraModulePackages = []; + boot.initrd.supportedFilesystems = ["zfs"]; # boot from zfs + boot.supportedFilesystems = ["zfs"]; - fileSystems."/" = lib.mkForce + fileSystems."/" = + lib.mkForce { device = "/dev/disk/by-uuid/c1e4f201-3c0a-4d88-bd7c-fcd908412df2"; fsType = "ext4"; @@ -22,8 +28,8 @@ fsType = "vboxsf"; }; - swapDevices = [ ]; + swapDevices = []; - nix.maxJobs = lib.mkDefault 2; + nix.settings.max-jobs = lib.mkDefault 2; virtualisation.virtualbox.guest.enable = true; } diff --git a/nixos/configurations/mimas.nix b/nixos/configurations/mimas.nix new file mode 100644 index 00000000..27a446c2 --- /dev/null +++ b/nixos/configurations/mimas.nix @@ -0,0 +1,383 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). +{unstable, ...}: { + config, + pkgs, + lib, + ... +}: let + upkgs = unstable.legacyPackages.x86_64-linux; + steamPackages = ["steam" "steam-original" "steam-runtime"]; + printerPackages = ["hplip" "samsung-UnifiedLinuxDriver"]; +in { + nix.allowedUnfree = ["zerotierone"] ++ printerPackages ++ steamPackages; + + security.chromiumSuidSandbox.enable = true; + + services.lvm.boot.thin.enable = true; + + # The global useDHCP flag is deprecated, therefore explicitly set to false here. + # Per-interface useDHCP will be mandatory in the future, so this generated config + # replicates the default behaviour. + networking.useDHCP = false; + networking.interfaces.enp5s0f2.useDHCP = false; + networking.interfaces.wlp4s0.useDHCP = false; + networking.hostId = "21025bb1"; + networking.networkmanager.enable = true; + networking.networkmanager.unmanaged = [ + # "mac:80:fa:5b:09:15:6e" + ]; + networking.extraHosts = '' + # 127.0.0.1 versions.teamspeak.com files.teamspeak-services.com + ''; + # networking.firewall.extraCommands = '' + # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -s 10.42.0.0/16 -d 127.0.0.1/32 -j ACCEPT + # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 6445 -s 10.42.0.0/16 -d 127.0.0.1/32 -j ACCEPT + # ''; + + # services.k3s.enable = true; + # services.k3s.extraFlags = "--write-kubeconfig-mode 0644 --node-external-ip 192.168.178.54 --node-external-ip 172.24.152.168"; + # systemd.services.k3s.after = [ "var-lib-rancher.mount" ]; + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Select internationalisation properties. + i18n = { + # consoleFont = "Lat2-Terminus16"; + # consoleKeyMap = "de"; + defaultLocale = "en_US.UTF-8"; + }; + + console.font = "Lat2-Terminus16"; + console.keyMap = "de"; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + virt-manager + iptables + ]; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + services.openssh.enable = true; + + # Add to XDG_DATA_DIRS: + # * /var/lib/flatpak/exports/share + # * $HOME/.local/share/flatpak/exports/share + services.flatpak.enable = true; + + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [80 443 1111 8080 9002 9003 2342 9999 3000 58080]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + networking.firewall.enable = true; + + # services.fwupd.enable = true; + + # Enable CUPS to print documents. + services.printing.enable = true; + services.printing.drivers = [pkgs.hplipWithPlugin pkgs.samsung-unified-linux-driver]; + + services.ratbagd.enable = true; + + # services.hydra = { + # enable = true; + # package = pkgs.hydra-unstable; + + # hydraURL = "https://localhost:3000"; + # notificationSender = "hydra@localhost"; + # buildMachinesFiles = [ ]; + # useSubstitutes = true; + # }; + # networking.firewall.allowedTCPPorts = [ 3000 ]; + + # Enable sound. + sound.enable = true; + hardware.pulseaudio = { + enable = true; + package = pkgs.pulseaudioFull; + }; + hardware.bluetooth.enable = true; + + # Enable the X11 windowing system. + services.xserver.enable = true; + services.xserver.layout = "de"; + # services.xserver.xkbOptions = "eurosign:e"; + + services.restic.server.enable = true; + services.restic.server.prometheus = true; + services.restic.server.extraFlags = ["--no-auth"]; + services.restic.server.listenAddress = "172.24.152.168:9999"; + systemd.services.restic-rest-server.after = ["var-lib-restic.mount"]; + + # Enable touchpad support. + # services.xserver.libinput.enable = true; + + # Enable the KDE Desktop Environment. + services.xserver.displayManager.sddm.enable = true; + services.xserver.desktopManager.plasma5.enable = true; + services.xserver.windowManager.awesome.enable = true; + + services.dbus.packages = with pkgs; [pkgs.dconf]; + + services.udev.extraRules = '' + KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666" + ''; + + services.transmission.enable = true; + systemd.services.transmission.after = ["var-lib-transmission.mount"]; + + programs = { + steam.enable = true; + zsh.enable = true; + zsh.enableCompletion = false; + }; + + hardware.opengl.driSupport32Bit = true; + hardware.pulseaudio.support32Bit = true; + + hardware.opengl.enable = true; + hardware.opengl.extraPackages = [pkgs.vaapiIntel pkgs.beignet]; + + services.gitea.enable = true; + + virtualisation = { + docker = { + enable = true; + # storageDriver = "zfs"; + # extraOptions = "--storage-opt zfs.fsname=rpool/local/docker"; + package = upkgs.docker; + extraOptions = "--dns 1.1.1.1"; + }; + + containers.enable = true; + + libvirtd.enable = true; + virtualbox.host.enable = true; + }; + + # Define a user account. Don't forget to set a password with ‘passwd’. + # users.users.jane = { + # isNormalUser = true; + # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. + # }; + users.users = { + nmelzer = { + isNormalUser = true; + shell = pkgs.zsh; + extraGroups = [ + "wheel" + "audio" + "networkmanager" + "vboxusers" + "libvirtd" + "docker" + "transmission" + ]; + }; + + gamer = { + isNormalUser = true; + extraGroups = [ + "audio" + "networkmanager" + ]; + }; + + aroemer = { + isNormalUser = true; + extraGroups = []; + }; + }; + + security.sudo.extraRules = [ + { + commands = [ + { + command = "/run/current-system/sw/bin/nixos-rebuild"; + options = ["NOPASSWD"]; + } + ]; + groups = ["wheel"]; + } + ]; + + # services.wakeonlan.interfaces = [ + # { + # interface = "enp5s0f2"; + # method = "magicpacket"; + # } + # ]; + + # grafana configuration + services.grafana = { + enable = true; + domain = "grafana.nobbz.lan"; + port = 2342; + addr = "0.0.0.0"; + }; + + # nginx reverse proxy + services.nginx.virtualHosts.${config.services.grafana.domain} = { + locations."/" = { + proxyPass = "http://127.0.0.1:${toString config.services.grafana.port}"; + proxyWebsockets = true; + }; + }; + + hardware.keyboard.zsa.enable = true; + + services.traefik.enable = true; + systemd.services.traefik.serviceConfig.EnvironmentFile = "/etc/traefik/env"; + services.traefik.staticConfigOptions = { + log.level = "DEBUG"; + + api.dashboard = true; + api.insecure = true; + # experimental.http3 = true; + + certificatesResolvers.mimasWildcard.acme = { + email = "acme@nobbz.dev"; + storage = "/var/lib/traefik/mimas.json"; + # caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"; + dnsChallenge.provider = "cloudflare"; + dnsChallenge.resolvers = ["1.1.1.1:53" "8.8.8.8:53"]; + }; + + entryPoints = { + http = { + address = ":80"; + forwardedHeaders.insecure = true; + http.redirections.entryPoint = { + to = "https"; + scheme = "https"; + }; + }; + + https = { + address = ":443"; + # enableHTTP3 = true; + forwardedHeaders.insecure = true; + }; + + experimental = { + address = ":1111"; + forwardedHeaders.insecure = true; + }; + }; + }; + services.traefik.dynamicConfigOptions = { + http.routers = { + api = { + entrypoints = ["traefik"]; + rule = "PathPrefix(`/api/`)"; + service = "api@internal"; + }; + fritz = { + entryPoints = ["https" "http"]; + rule = "Host(`fritz.mimas.internal.nobbz.dev`)"; + service = "fritz"; + tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; + tls.certResolver = "mimasWildcard"; + }; + paperless = { + entryPoints = ["https" "http"]; + rule = "Host(`paperless.mimas.internal.nobbz.dev`)"; + service = "paperless"; + tls.domains = [{main = "*.mimas.internal.nobbz.dev";}]; + tls.certResolver = "mimasWildcard"; + }; + # minio-tls = { + # entryPoints = [ "https" "experimental" ]; + # rule = "HostRegexp(`{subdomain:[a-z0-9]+}.mimas.internal.nobbz.dev`) && PathPrefix(`/`)"; + # service = "minio"; + # tls.domains = [{ main = "*.mimas.internal.nobbz.dev"; }]; + # tls.certresolver = "mimasWildcard"; + # }; + }; + http.services = { + minio.loadBalancer.passHostHeader = true; + minio.loadBalancer.servers = [{url = "http://192.168.122.122/";}]; + + fritz.loadBalancer.passHostHeader = false; + fritz.loadBalancer.servers = [{url = "http://fritz.box";}]; + + paperless.loadBalancer.passHostHeader = true; + paperless.loadBalancer.servers = [{url = "http://localhost:58080";}]; + }; + }; + + services.prometheus = { + enable = true; + port = 9001; + + rules = [ + '' + groups: + - name: test + rules: + - record: nobbz:code_cpu_percent + expr: avg without (cpu) (irate(node_cpu_seconds_total[5m])) + '' + ]; + + exporters = { + node = { + enable = true; + enabledCollectors = ["systemd"]; + port = 9002; + }; + }; + + scrapeConfigs = [ + { + job_name = "grafana"; + static_configs = [{targets = ["127.0.0.1:2342"];}]; + } + { + job_name = "prometheus"; + static_configs = [{targets = ["127.0.0.1:9001"];}]; + } + { + job_name = "node_import"; + static_configs = [ + { + targets = [ + "127.0.0.1:${toString config.services.prometheus.exporters.node.port}" + "172.24.199.101:9002" + "172.24.231.199:9002" + ]; + } + ]; + } + ]; + }; + + services.paperless-ng = { + enable = true; + # address = "mimas.internal.nobbz.dev"; + address = "0.0.0.0"; + port = 58080; + extraConfig.PAPERLESS_OCR_LANGUAGE = "deu+eng"; + }; + systemd.services.paperless-ng-server.after = ["var-lib-paperless.mount"]; + + # This value determines the NixOS release with which your system is to be + # compatible, in order to avoid breaking some software such as database + # servers. You should change this only after NixOS release notes say you + # should. + system.stateVersion = "19.09"; # Did you read the comment? +} diff --git a/nixos/configurations/thetys.nix b/nixos/configurations/thetys.nix new file mode 100644 index 00000000..832dabf2 --- /dev/null +++ b/nixos/configurations/thetys.nix @@ -0,0 +1,125 @@ +{ + self, + nixpkgs-2105, + ... +}: { + self, + config, + pkgs, + modulesPath, + ... +}: { + # TODO: 👇 move import of `virtualbox-demo.nix` into extra module 👇 + imports = [(modulesPath + "/installer/virtualbox-demo.nix")]; + + nix.allowedUnfree = ["zerotierone"]; + + networking.hostId = "deadbeef"; + + programs.gnupg = { + agent = { + enable = true; + enableSSHSupport = true; + pinentryFlavor = "tty"; + }; + }; + + users.users.demo = { + isNormalUser = true; + description = "Demo user account"; + extraGroups = ["wheel" "docker"]; + uid = 1000; + shell = pkgs.zsh; + }; + + boot.kernel.sysctl = { + "vm.max_map_count" = 262144; + }; + + programs.zsh.enable = true; + programs.zsh.enableCompletion = false; + + virtualisation = { + docker.enable = true; + docker.extraOptions = "--insecure-registry registry.cap01.cloudseeds.de"; + docker.liveRestore = false; + podman.enable = true; + }; + + console.font = "Lat2-Terminus16"; + console.keyMap = "de"; + + services.xserver.layout = pkgs.lib.mkForce "de"; + + services.xserver.videoDrivers = ["vmware" "virtualbox" "modesetting"]; + systemd.services.virtualbox-resize = { + description = "VirtualBox Guest Screen Resizing"; + + wantedBy = ["multi-user.target"]; + requires = ["dev-vboxguest.device"]; + after = ["dev-vboxguest.device"]; + + unitConfig.ConditionVirtualization = "oracle"; + + serviceConfig.ExecStart = "@${config.boot.kernelPackages.virtualboxGuestAdditions}/bin/VBoxClient -fv --vmsvga"; + }; + + # services.zerotierone.package = nixpkgs-2105.legacyPackages.${pkgs.system}.zerotierone; + + # services.ipfs.enable = true; + + services.openssh.enable = true; + + swapDevices = [ + { + device = "/var/swap-2"; + size = 2048 * 4; + } + ]; + + networking.hosts."127.0.0.1" = ["ax69_mysql"]; + networking.firewall.allowedTCPPorts = [ + # ports often used for development, that I want to expose for easier access from the host + 3000 + 3306 + 8080 + 8081 + 9002 + ]; + + nix.distributedBuilds = false; + nix.buildMachines = [ + { + hostName = "builder-zerotier"; + system = "x86_64-linux"; + maxJobs = 1; + speedFactor = 1; + supportedFeatures = ["nixos-test" "benchmark" "big-parallel" "kvm"]; + mandatoryFeatures = []; + } + ]; + + security.sudo.extraRules = [ + { + commands = [ + { + command = "/run/current-system/sw/bin/nixos-rebuild"; + options = ["NOPASSWD"]; + } + ]; + groups = ["wheel"]; + } + ]; + + services.prometheus = { + exporters = { + node = { + enable = true; + enabledCollectors = ["systemd"]; + port = 9002; + }; + }; + }; + + system.stateVersion = "19.09"; +} diff --git a/nixos/hosts/default.nix b/nixos/hosts/default.nix deleted file mode 100644 index 7a9671cf..00000000 --- a/nixos/hosts/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ self, ... }@inputs: -let - mkSystem = name: nixpkgs: modules: - nixpkgs.lib.nixosSystem ({ - extraArgs = inputs; - - system = "x86_64-linux"; - - modules = [ - (./. + "/legacy/${name}.nix") - (./. + "/hardware/${name}.nix") - nixpkgs.nixosModules.notDetected - ] ++ modules; - }); -in -{ - delly-nixos = mkSystem "delly-nixos" inputs.unstable (with self.nixosModules; [ cachix flake gc version ]); - tux-nixos = mkSystem "tux-nixos" inputs.nixpkgs-2105 (with self.nixosModules; [ cachix flake intel gc version ]); - nixos = mkSystem "nixos" inputs.unstable (with self.nixosModules; [ cachix flake virtualbox-demo gc version ]); -} diff --git a/nixos/hosts/hardware/delly-nixos.nix b/nixos/hosts/hardware/delly-nixos.nix deleted file mode 100644 index 40646e1e..00000000 --- a/nixos/hosts/hardware/delly-nixos.nix +++ /dev/null @@ -1,25 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, ... }: - -{ - imports = - [ ]; - - boot.initrd.availableKernelModules = [ "uhci_hcd" "ehci_pci" "ahci" "firewire_ohci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "sdhci_pci" ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" "wl" ]; - boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ]; - - fileSystems."/" = - { - device = "/dev/disk/by-uuid/4a31eb44-990b-4fdd-a19b-6ede2b1ae58b"; - fsType = "ext4"; - }; - - swapDevices = - [{ device = "/dev/disk/by-uuid/87c5fea1-6bcb-41d4-af9d-b9342a45c9b3"; }]; - - nix.maxJobs = lib.mkDefault 1; -} diff --git a/nixos/hosts/hardware/tux-nixos.nix b/nixos/hosts/hardware/tux-nixos.nix deleted file mode 100644 index 317ae731..00000000 --- a/nixos/hosts/hardware/tux-nixos.nix +++ /dev/null @@ -1,48 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, ... }: - -{ - imports = - [ ]; - - boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "rtsx_pci_sdmmc" ]; - boot.initrd.kernelModules = [ "dm-snapshot" ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { - device = "/dev/disk/by-uuid/440c8ce1-1799-4239-936f-a54c879941a5"; - fsType = "ext4"; - }; - - fileSystems."/home" = - { - device = "/dev/disk/by-uuid/8119ca17-576f-49a2-9496-946d6759a59b"; - fsType = "ext4"; - }; - - fileSystems."/nix" = - { - device = "/dev/disk/by-uuid/48574e4d-3a82-4b04-ac28-d55c32fa3aff"; - fsType = "ext4"; - }; - - fileSystems."/var/lib/docker" = { - device = "/dev/disk/by-uuid/5da6b8c1-2598-48f1-9541-49c50e95aac9"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { - device = "/dev/disk/by-uuid/7000-3A85"; - fsType = "vfat"; - }; - - swapDevices = [ ]; - - nix.maxJobs = lib.mkDefault 4; - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; -} diff --git a/nixos/hosts/legacy/delly-nixos.nix b/nixos/hosts/legacy/delly-nixos.nix deleted file mode 100644 index 45bf5196..00000000 --- a/nixos/hosts/legacy/delly-nixos.nix +++ /dev/null @@ -1,226 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). - -{ config, pkgs, ... }: - -{ - nixpkgs.config.allowUnfree = true; - nixpkgs.config.contentAddressedByDefault = false; - - nixpkgs.overlays = [ - (final: prev: { - mercurial = prev.mercurial.overrideAttrs (o: { - patches = [ - (prev.fetchpatch { - name = "D10638.diff"; - url = "https://phab.mercurial-scm.org/D10638?download=true"; - sha256 = "sha256-rigsbfmVO0vdOG48p4bF3t9cXl0PyNEsO1QAHYkY0VU="; - }) - (prev.fetchpatch { - name = "D10639.diff"; - url = "https://phab.mercurial-scm.org/D10639?download=true"; - sha256 = "sha256-iyEmQh/7IM5U48qTlH3rALa+WQ2TOG2yS+iELlqmsUA="; - }) - ]; - }); - - SDL = with prev; prev.SDL.overrideAttrs (o: { - patches = [ - # "${prev.pkgs}/pkgs/development/libraries/SDL/find-headers.patch" - "${builtins.head o.patches}" - - # Fix window resizing issues, e.g. for xmonad - # Ticket: http://bugzilla.libsdl.org/show_bug.cgi?id=1430 - (fetchpatch { - name = "fix_window_resizing.diff"; - url = "https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=10;filename=fix_window_resizing.diff;att=2;bug=66 -5779"; - sha256 = "1z35azc73vvi19pzi6byck31132a8w1vzrghp1x3hy4a4f9z4gc6"; - }) - # Fix drops of keyboard events for SDL_EnableUNICODE - (fetchpatch { - url = "https://github.com/libsdl-org/SDL-1.2/commit/0332e2bb18dc68d6892c3b653b2547afe323854b.patch"; - sha256 = "sha256-5V6K0oTN56RRi48XLPQsjgLzt0a6GsjajDrda3ZEhTw="; - }) - # Ignore insane joystick axis events - (fetchpatch { - url = "https://github.com/libsdl-org/SDL-1.2/commit/ab99cc82b0a898ad528d46fa128b649a220a94f4.patch"; - sha256 = "sha256-uussXT9Spsg8WUX5CNHZ6HthYy3HE381xi03Ygv3hwU="; - }) - # https://bugzilla.libsdl.org/show_bug.cgi?id=1769 - (fetchpatch { - url = "https://github.com/libsdl-org/SDL-1.2/commit/5d79977ec7a6b58afa6e4817035aaaba186f7e9f.patch"; - sha256 = "sha256-JvMP7+P/NmWLNsCGfElDLdlA99Nbggw+5jskD572fXU="; - }) - # Workaround X11 bug to allow changing gamma - # Ticket: https://bugs.freedesktop.org/show_bug.cgi?id=27222 - (fetchpatch { - name = "SDL_SetGamma.patch"; - url = "https://src.fedoraproject.org/cgit/rpms/SDL.git/plain/SDL-1.2.15-x11-Bypass-SetGammaRamp-when-chang -ing-gamma.patch?id=04a3a7b1bd88c2d5502292fad27e0e02d084698d"; - sha256 = "0x52s4328kilyq43i7psqkqg7chsfwh0aawr50j566nzd7j51dlv"; - }) - # Fix a build failure on OS X Mavericks - # Ticket: https://bugzilla.libsdl.org/show_bug.cgi?id=2085 - (fetchpatch { - url = "https://github.com/libsdl-org/SDL-1.2/commit/19039324be71738d8990e91b9ba341b2ea068445.patch"; - sha256 = "sha256-CPcLE+8JMKoiJEdIWNVphIMIgDOIJBmkSNO1zuM97B8="; - }) - (fetchpatch { - url = "https://github.com/libsdl-org/SDL-1.2/commit/7933032ad4d57c24f2230db29f67eb7d21bb5654.patch"; - sha256 = "sha256-6CdDVsrka8zlqFrZ2SCo62DuiSWiGJIfLi/rMX2v0W4="; - }) - ]; - }); - }) - ]; - - imports = [ ]; - - # nix.useSandbox = false; - nix.autoOptimiseStore = true; - nix.buildCores = 1; - nix.maxJobs = 2; - # nix.gc.automatic = true; - - # Use the GRUB 2 boot loader. - boot.loader.grub.enable = true; - boot.loader.grub.version = 2; - boot.loader.grub.useOSProber = false; - - # boot.loader.grub.efiSupport = true; - # boot.loader.grub.efiInstallAsRemovable = true; - # boot.loader.efi.efiSysMountPoint = "/boot/efi"; - # Define on which hard drive you want to install Grub. - boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only - - boot.kernelPackages = pkgs.linuxPackages_5_4; - boot.blacklistedKernelModules = [ "rtl8xxxu" ]; - boot.extraModulePackages = with config.boot.kernelPackages; [ - rtl8192eu - ]; - boot.supportedFilesystems = [ "zfs" "ntfs-3g" ]; - - # boot.kernelPackages = pkgs.linuxPackages_4_19; - boot.kernel.sysctl = { - "vm.swappiness" = 75; - }; - - networking.hostName = "delly-nixos"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - - # The global useDHCP flag is deprecated, therefore explicitly set to false here. - # Per-interface useDHCP will be mandatory in the future, so this generated config - # replicates the default behaviour. - networking.networkmanager.enable = true; - networking.networkmanager.unmanaged = [ - "mac:0c:60:76:3f:c1:31" - ]; - networking.enableB43Firmware = true; - - networking.useDHCP = false; - networking.interfaces.enp0s25.useDHCP = false; - networking.interfaces.wlan0.useDHCP = false; - networking.hostId = "62a007d6"; # required by ZFS - - # hardware.opengl.driSupport32Bit = true; - # hardware.pulseaudio.support32Bit = true; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - console = { - font = "Lat2-Terminus16"; - keyMap = "de"; - }; - - # Set your time zone. - time.timeZone = "Europe/Berlin"; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - wget - rsync - git - ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - services.openssh.enable = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # Enable sound. - sound.enable = true; - hardware.pulseaudio.enable = true; - - # Enable the X11 windowing system. - services.xserver.enable = true; - services.xserver.layout = "de"; - # services.xserver.xkbOptions = "eurosign:e"; - - services.zerotierone.enable = true; - services.zerotierone.joinNetworks = [ "8286ac0e4768c8ae" ]; - - # Enable touchpad support. - # services.xserver.libinput.enable = true; - - # Enable the KDE Desktop Environment. - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = false; - services.xserver.windowManager.awesome.enable = true; - - # services.kbfs.enable = true; - # services.keybase.enable = true; - - virtualisation = { - docker = { - enable = false; - }; - - # virtualbox.host.enable = true; - }; - - programs.gc.enable = true; - programs.gc.maxAge = "30d"; - - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users = { - nmelzer = { - isNormalUser = true; - shell = pkgs.zsh; - extraGroups = [ "wheel" "networkmanager" "adbusers" ]; # Enable ‘sudo’ for the user. - }; - aroemer = { - isNormalUser = true; - }; - proemer = { - isNormalUser = true; - }; - }; - - # This value determines the NixOS release with which your system is to be - # compatible, in order to avoid breaking some software such as database - # servers. You should change this only after NixOS release notes say you - # should. - system.stateVersion = "19.09"; # Did you read the comment? - -} diff --git a/nixos/hosts/legacy/nixos.nix b/nixos/hosts/legacy/nixos.nix deleted file mode 100644 index e7ccea32..00000000 --- a/nixos/hosts/legacy/nixos.nix +++ /dev/null @@ -1,103 +0,0 @@ -{ self, config, pkgs, nixpkgs-2105, ... }: - -{ - nixpkgs.config.allowUnfree = true; - - # environment.extraSetup = '' - # ln -s ${pkgs.pinentry-gtk2}/bin/pinentry $out/bin/pinentry-gtk-2 - # ln -s ${pkgs.pinentry-curses}/bin/pinentry $out/bin/pinentry-curses - # ln -s ${pkgs.pinentry}/bin/pinentry $out/bin/pinentry-tty - # ln -s $out/bin/pinentry-tty $out/bin/pinentry - # ''; - - programs.gnupg = { - agent = { - enable = true; - enableSSHSupport = true; - pinentryFlavor = "tty"; - }; - }; - - # security.pam.services.login.gnupg.enable = true; - - users.users.demo = - { - isNormalUser = true; - description = "Demo user account"; - extraGroups = [ "wheel" "docker" ]; - uid = 1000; - shell = pkgs.zsh; - }; - - boot.kernel.sysctl = { - "vm.max_map_count" = 262144; - }; - - programs.zsh.enable = true; - programs.zsh.enableCompletion = false; - - nix.useSandbox = true; - nix.autoOptimiseStore = true; - - virtualisation = { - docker.enable = true; - docker.extraOptions = "--insecure-registry registry.cap01.cloudseeds.de"; - podman.enable = true; - }; - - console.font = "Lat2-Terminus16"; - console.keyMap = "de"; - - services.xserver.layout = pkgs.lib.mkForce "de"; - - services.xserver.videoDrivers = [ "vmware" "virtualbox" "modesetting" ]; - systemd.services.virtualbox-resize = { - description = "VirtualBox Guest Screen Resizing"; - - wantedBy = [ "multi-user.target" ]; - requires = [ "dev-vboxguest.device" ]; - after = [ "dev-vboxguest.device" ]; - - unitConfig.ConditionVirtualization = "oracle"; - - serviceConfig.ExecStart = "@${config.boot.kernelPackages.virtualboxGuestAdditions}/bin/VBoxClient -fv --vmsvga"; - }; - - # environment.systemPackages = [ pkgs.pinentry.gnome3 ]; - - services.zerotierone.enable = true; - services.zerotierone.joinNetworks = [ "8286ac0e4768c8ae" ]; - services.zerotierone.package = (import nixpkgs-2105 { config.allowUnfree = true; system = pkgs.system; }).zerotierone; - - services.ipfs.enable = true; - - # Mount a VirtualBox shared folder. - # This is configurable in the VirtualBox menu at - # Machine / Settings / Shared Folders. - # fileSystems."/mnt" = { - # fsType = "vboxsf"; - # device = "nameofdevicetomount"; - # options = [ "rw" ]; - # }; - - services.openssh.enable = true; - - programs.gc.enable = true; - - swapDevices = [{ - device = "/var/swap-2"; - size = 2048 * 4; - }]; - - nix.distributedBuilds = false; - nix.buildMachines = [ - { - hostName = "builder-zerotier"; - system = "x86_64-linux"; - maxJobs = 1; - speedFactor = 1; - supportedFeatures = [ "nixos-test" "benchmark" "big-parallel" "kvm" ]; - mandatoryFeatures = [ ]; - } - ]; -} diff --git a/nixos/hosts/legacy/tux-nixos.nix b/nixos/hosts/legacy/tux-nixos.nix deleted file mode 100644 index affee864..00000000 --- a/nixos/hosts/legacy/tux-nixos.nix +++ /dev/null @@ -1,229 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). - -{ config, pkgs, lib, unstable, ... }: -let upkgs = import unstable { system = "x86_64-linux"; }; in -{ - imports = [ ]; - - nixpkgs.config.allowUnfreePredicate = (pkg: builtins.elem (lib.getName pkg) [ - "hplip" - "zerotierone" - ]); - nix.autoOptimiseStore = true; - nix.gc.automatic = true; - nix.gc.options = "--delete-older-than 10d"; - - security.chromiumSuidSandbox.enable = true; - - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.supportedFilesystems = [ "zfs" "ntfs" "btrfs" "exfat" "avfs" ]; - boot.cleanTmpDir = true; - - hardware.enableRedistributableFirmware = true; - # networking.enableRalinkFirmware = true; - - networking.hostName = "tux-nixos"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - - # The global useDHCP flag is deprecated, therefore explicitly set to false here. - # Per-interface useDHCP will be mandatory in the future, so this generated config - # replicates the default behaviour. - networking.useDHCP = false; - networking.interfaces.enp5s0f2.useDHCP = false; - networking.interfaces.wlp4s0.useDHCP = false; - networking.hostId = "21025bb1"; - networking.networkmanager.enable = true; - networking.networkmanager.unmanaged = [ - "mac:80:fa:5b:09:15:6e" - ]; - networking.extraHosts = '' - # 127.0.0.1 versions.teamspeak.com files.teamspeak-services.com - ''; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - i18n = { - # consoleFont = "Lat2-Terminus16"; - # consoleKeyMap = "de"; - defaultLocale = "en_US.UTF-8"; - }; - - console.font = "Lat2-Terminus16"; - console.keyMap = "de"; - - # Set your time zone. - time.timeZone = "Europe/Berlin"; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ virt-manager ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - services.openssh.enable = true; - - services.ipfs.enable = true; - - services.zerotierone.enable = true; - services.zerotierone.joinNetworks = [ "8286ac0e4768c8ae" ]; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - services.fwupd.enable = true; - - # Enable CUPS to print documents. - services.printing.enable = true; - services.printing.drivers = [ pkgs.hplipWithPlugin ]; - - services.ratbagd.enable = true; - - # services.hydra = { - # enable = true; - # package = pkgs.hydra-unstable; - - # hydraURL = "https://localhost:3000"; - # notificationSender = "hydra@localhost"; - # buildMachinesFiles = [ ]; - # useSubstitutes = true; - # }; - # networking.firewall.allowedTCPPorts = [ 3000 ]; - - # Enable sound. - sound.enable = true; - hardware.pulseaudio = { - enable = true; - package = pkgs.pulseaudioFull; - }; - hardware.bluetooth.enable = true; - - # Enable the X11 windowing system. - services.xserver.enable = true; - services.xserver.layout = "de"; - # services.xserver.xkbOptions = "eurosign:e"; - - # Enable touchpad support. - # services.xserver.libinput.enable = true; - - # Enable the KDE Desktop Environment. - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - services.xserver.windowManager.awesome.enable = true; - - services.dbus.packages = with pkgs; [ gnome3.dconf ]; - - services.udev.extraRules = '' - KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666" - ''; - - services.transmission.enable = true; - systemd.services.transmission.after = [ "var-lib-transmission.mount" ]; - - services.zfs = { - trim.enable = false; - autoScrub.enable = true; - autoSnapshot = { - enable = true; - flags = "-k -p -u"; - frequent = 6 * 4; # 6 hours! - hourly = 12; - daily = 3; - weekly = 4; - monthly = 2; - }; - }; - - programs = { - # steam.enable = true; - zsh.enable = true; - zsh.enableCompletion = false; - }; - - hardware.opengl.driSupport32Bit = true; - hardware.pulseaudio.support32Bit = true; - - hardware.opengl.enable = true; - hardware.opengl.extraPackages = [ pkgs.vaapiIntel pkgs.beignet ]; - - virtualisation = { - docker = { - enable = true; - # storageDriver = "zfs"; - # extraOptions = "--storage-opt zfs.fsname=rpool/local/docker"; - package = upkgs.docker; - extraOptions = "--ipv6 --dns 1.1.1.1"; - }; - - containers.enable = true; - - libvirtd.enable = true; - virtualbox.host.enable = true; - }; - - # Define a user account. Don't forget to set a password with ‘passwd’. - # users.users.jane = { - # isNormalUser = true; - # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - # }; - users.users = { - nmelzer = { - isNormalUser = true; - shell = pkgs.zsh; - extraGroups = [ - "wheel" - "audio" - "networkmanager" - "vboxusers" - "libvirtd" - "docker" - "transmission" - ]; - }; - - aroemer = { - isNormalUser = true; - extraGroups = [ ]; - }; - }; - - security.sudo.extraRules = [ - { - commands = [ - { - command = "/run/current-system/sw/bin/nixos-rebuild"; - options = [ "NOPASSWD" ]; - } - ]; - groups = [ "wheel" ]; - } - ]; - - services.wakeonlan.interfaces = [ - { - interface = "enp5s0f2"; - method = "magicpacket"; - } - ]; - - # This value determines the NixOS release with which your system is to be - # compatible, in order to avoid breaking some software such as database - # servers. You should change this only after NixOS release notes say you - # should. - system.stateVersion = "19.09"; # Did you read the comment? -} diff --git a/nixos/modules/cachix.nix b/nixos/modules/cachix.nix deleted file mode 100644 index 40fc6ea9..00000000 --- a/nixos/modules/cachix.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, pkgs, lib, ... }: -let - folder = ./cachix; - toImport = name: value: folder + ("/" + name); - filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key; - imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder)); - - hostname = config.networking.hostName; - caEnabled = __elem hostname [ ]; -in -{ - inherit imports; - nix.binaryCaches = lib.mkDefault (lib.optional caEnabled "https://cache.nixos.org/"); - - environment.systemPackages = [ pkgs.cachix ]; -} diff --git a/nixos/modules/cachix/ca-nix.nix b/nixos/modules/cachix/ca-nix.nix deleted file mode 100644 index b6de359a..00000000 --- a/nixos/modules/cachix/ca-nix.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, lib, ... }: - -{ - nix = { - binaryCaches = - if (config.networking.hostName == "delly-nixos") then - lib.mkForce [ - # "https://cache.ngi0.nixos.org/" - ] - else [ ]; - binaryCachePublicKeys = [ - "cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA=" - ]; - }; -} diff --git a/nixos/modules/cachix/nix-community.nix b/nixos/modules/cachix/caches/nix-community.nix similarity index 68% rename from nixos/modules/cachix/nix-community.nix rename to nixos/modules/cachix/caches/nix-community.nix index 20a3ddf9..e4956bdf 100644 --- a/nixos/modules/cachix/nix-community.nix +++ b/nixos/modules/cachix/caches/nix-community.nix @@ -1,11 +1,13 @@ -{ config, lib, ... }: - { + config, + lib, + ... +}: { nix = lib.mkIf (config.networking.hostName != "delly-nixos") { - binaryCaches = [ + settings.substituters = [ "https://nix-community.cachix.org" ]; - binaryCachePublicKeys = [ + settings.trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ]; }; diff --git a/nixos/modules/cachix/nobbz.nix b/nixos/modules/cachix/caches/nobbz.nix similarity index 67% rename from nixos/modules/cachix/nobbz.nix rename to nixos/modules/cachix/caches/nobbz.nix index dc26edca..b5d8615f 100644 --- a/nixos/modules/cachix/nobbz.nix +++ b/nixos/modules/cachix/caches/nobbz.nix @@ -1,11 +1,13 @@ -{ config, lib, ... }: - { + config, + lib, + ... +}: { nix = lib.mkIf (config.networking.hostName != "delly-nixos") { - binaryCaches = [ + settings.substituters = [ "https://nobbz.cachix.org" ]; - binaryCachePublicKeys = [ + settings.trusted-public-keys = [ "nobbz.cachix.org-1:fODxpqE4ni+pFDSuj2ybYZbMUjmxNTjA7rtUNHW61Ok=" ]; }; diff --git a/nixos/modules/cachix/ts-helper.nix b/nixos/modules/cachix/caches/ts-helper.nix similarity index 67% rename from nixos/modules/cachix/ts-helper.nix rename to nixos/modules/cachix/caches/ts-helper.nix index a7dc190c..19b5f460 100644 --- a/nixos/modules/cachix/ts-helper.nix +++ b/nixos/modules/cachix/caches/ts-helper.nix @@ -1,11 +1,13 @@ -{ config, lib, ... }: - { + config, + lib, + ... +}: { nix = lib.mkIf (config.networking.hostName != "delly-nixos") { - binaryCaches = [ + settings.substituters = [ "https://ts-helper.cachix.org" ]; - binaryCachePublicKeys = [ + settings.trusted-public-keys = [ "ts-helper.cachix.org-1:l9XtzxPqlR/lKsKpTS+DcCn4cCuYiUSgGzIsLF3vz9Q=" ]; }; diff --git a/nixos/modules/cachix/default.nix b/nixos/modules/cachix/default.nix new file mode 100644 index 00000000..77fc1415 --- /dev/null +++ b/nixos/modules/cachix/default.nix @@ -0,0 +1,16 @@ +_: { + config, + pkgs, + lib, + ... +}: let + folder = ./caches; + toImport = name: value: folder + ("/" + name); + filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key; + imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder)); +in { + inherit imports; + nix.settings.substituters = ["https://cache.nixos.org/"]; + + environment.systemPackages = [pkgs.cachix]; +} diff --git a/nixos/modules/default.nix b/nixos/modules/default.nix index 3e59248c..c4125a2d 100644 --- a/nixos/modules/default.nix +++ b/nixos/modules/default.nix @@ -1,11 +1,9 @@ -{ - cachix = import ./cachix.nix; - flake = import ./flake.nix; - gc = import ./gc.nix; - intel = import ./intel.nix; - k3s = import ./k3s.nix; - kubernetes = import ./kubernetes.nix; - packet-iscsi = import ./packet-iscsi.nix; - version = import ./version.nix; - virtualbox-demo = import ./virtualbox-demo.nix; +inputs: { + cachix = import ./cachix inputs; + flake = import ./flake.nix inputs; + hostnames = import ./hostnames.nix inputs; + kernel = import ./kernel.nix inputs; + moonlander = import ./moonlander.nix inputs; + nix = import ./nix.nix inputs; + zerotier = import ./zerotier.nix inputs; } diff --git a/nixos/modules/flake.nix b/nixos/modules/flake.nix index 0acf5399..1102b870 100644 --- a/nixos/modules/flake.nix +++ b/nixos/modules/flake.nix @@ -1,18 +1,43 @@ -{ config, pkgs, nixpkgs-2105, nix, lib, ... }: -let - hostname = __trace config.networking.hostName config.networking.hostName; - caEnabled = __elem hostname [ "delly-nixos" "tux-nixos" ]; - caOpts = __trace (lib.optionalString caEnabled "ca-derivations ca-references") (lib.optionalString caEnabled "ca-derivations ca-references"); -in { - nix = { - package = nix.packages.x86_64-linux.nix; # pkgs.nixUnstable; - extraOptions = '' - experimental-features = nix-command flakes ${caOpts} - ''; + unstable, + nixpkgs-2105, + nixpkgs-2111, + nix, + ... +}: { + config, + pkgs, + lib, + ... +}: let + base = "/etc/nixpkgs/channels"; + nixpkgsPath = "${base}/nixpkgs"; + nixpkgs2105Path = "${base}/nixpkgs2105"; + nixpkgs2111Path = "${base}/nixpkgs2111"; +in { + options.nix.flakes.enable = lib.mkEnableOption "nix flakes"; - registry.nixpkgs.flake = nixpkgs-2105; - }; + config = lib.mkIf config.nix.flakes.enable { + nix = { + package = lib.mkDefault (nix.packages.x86_64-linux.nix.overrideAttrs (_: {patches = [./unset-is-macho.patch];})); # pkgs.nixUnstable; + experimentalFeatures = "nix-command flakes"; + + registry.nixpkgs.flake = unstable; + registry.nixpkgs2105.flake = nixpkgs-2105; + registry.nixpkgs2111.flake = nixpkgs-2111; - environment.systemPackages = [ nix.packages.x86_64-linux.nix ]; + nixPath = [ + "nixpkgs=${nixpkgsPath}" + "nixpkgs2105=${nixpkgs2105Path}" + "nixpkgs2111=${nixpkgs2111Path}" + "/nix/var/nix/profiles/per-user/root/channels" + ]; + }; + + systemd.tmpfiles.rules = [ + "L+ ${nixpkgsPath} - - - - ${unstable}" + "L+ ${nixpkgs2105Path} - - - - ${nixpkgs-2105}" + "L+ ${nixpkgs2111Path} - - - - ${nixpkgs-2111}" + ]; + }; } diff --git a/nixos/modules/gc.nix b/nixos/modules/gc.nix deleted file mode 100644 index ba07fbaf..00000000 --- a/nixos/modules/gc.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - options.programs.gc = { - enable = lib.mkEnableOption "enable GC tool"; - - maxAge = lib.mkOption { - type = lib.types.str; - default = "180d"; - }; - }; - - config = lib.mkIf config.programs.gc.enable { - environment.systemPackages = [ - (pkgs.writeShellScriptBin "gc" '' - sudo ${config.nix.package}/bin/nix-collect-garbage --delete-older-than ${config.programs.gc.maxAge} --verbose - '') - ]; - }; -} diff --git a/nixos/modules/hostnames.nix b/nixos/modules/hostnames.nix new file mode 100644 index 00000000..60bd9948 --- /dev/null +++ b/nixos/modules/hostnames.nix @@ -0,0 +1,9 @@ +_: { + config, + lib, + pkgs, + ... +}: { + networking.search = ["internal.nobbz.dev"]; + networking.domain = "internal.nobbz.dev"; +} diff --git a/nixos/modules/intel.nix b/nixos/modules/intel.nix deleted file mode 100644 index a3e4ad4c..00000000 --- a/nixos/modules/intel.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, lib, pkgs, ... }: - -{ - boot.initrd.kernelModules = [ "i915" ]; - - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - - hardware.opengl.extraPackages = with pkgs; [ - vaapiIntel - vaapiVdpau - libvdpau-va-gl - intel-media-driver - ]; -} diff --git a/nixos/modules/k3s.nix b/nixos/modules/k3s.nix deleted file mode 100644 index 6ec18c41..00000000 --- a/nixos/modules/k3s.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, lib, pkgs, unstable, ... }: - -{ - services.k3s = { - enable = true; - package = unstable.legacyPackages.x86_64-linux.k3s; - role = "server"; - docker = true; - extraFlags = "--write-kubeconfig-mode 644 --disable traefik --default-local-storage-path /opt/local-path-provisioner"; - }; - - systemd.services.k3s.path = [ pkgs.zfs ]; - - # https://github.com/NixOS/nixpkgs/issues/103158 - systemd.services.k3s.after = [ "network-online.service" "firewall.service" ]; - systemd.services.k3s.serviceConfig.KillMode = lib.mkForce "control-group"; - - # https://github.com/NixOS/nixpkgs/issues/98766 - boot.kernelModules = [ "br_netfilter" "ip_conntrack" "ip_vs" "ip_vs_rr" "ip_vs_wrr" "ip_vs_sh" "overlay" ]; - networking.firewall.extraCommands = '' - iptables -A INPUT -i cni+ -j ACCEPT - ''; -} diff --git a/nixos/modules/kernel.nix b/nixos/modules/kernel.nix new file mode 100644 index 00000000..cd67c46b --- /dev/null +++ b/nixos/modules/kernel.nix @@ -0,0 +1,14 @@ +_: { + pkgs, + lib, + config, + ... +}: let + zfsUsed = lib.lists.elem "zfs" (config.boot.supportedFilesystems ++ config.boot.initrd.supportedFilesystems); +in { + boot.kernelPackages = lib.mkDefault ( + if zfsUsed + then pkgs.zfs.latestCompatibleLinuxPackages + else pkgs.linuxPackages_latest + ); +} diff --git a/nixos/modules/kubernetes.nix b/nixos/modules/kubernetes.nix deleted file mode 100644 index 406bf21d..00000000 --- a/nixos/modules/kubernetes.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, ... }: -let - hostname = config.networking.hostName; - - # This IP is in the zerotier network, making the kubernetes network - # available within the network only so far. - ip = "192.168.178.76"; # TODO: make an option to configure. -in -{ - services.kubernetes = { - roles = [ "master" "node" ]; - masterAddress = hostname; - kubelet.extraOpts = "--fail-swap-on=false"; - easyCerts = true; - - apiserver = { - enable = true; - insecurePort = 80; - securePort = 8443; - advertiseAddress = ip; - }; - - addonManager.enable = true; - addons = { - dashboard.enable = true; - }; - }; -} diff --git a/nixos/modules/moonlander.nix b/nixos/modules/moonlander.nix new file mode 100644 index 00000000..67407413 --- /dev/null +++ b/nixos/modules/moonlander.nix @@ -0,0 +1,16 @@ +_: { + config, + lib, + pkgs, + ... +}: let + inherit (lib) mkIf; + inherit (pkgs) wally-cli; + + cfg = config.hardware.keyboard.zsa; +in { + config = mkIf cfg.enable { + users.users.nmelzer.extraGroups = ["plugdev"]; + environment.systemPackages = [wally-cli]; + }; +} diff --git a/nixos/modules/nix.nix b/nixos/modules/nix.nix new file mode 100644 index 00000000..790eab9f --- /dev/null +++ b/nixos/modules/nix.nix @@ -0,0 +1,35 @@ +_: { + config, + lib, + ... +}: let + allowed = config.nix.allowedUnfree; +in { + options.nix = { + experimentalFeatures = lib.mkOption { + type = lib.types.separatedString " "; + default = ""; + description = '' + Enables experimental features + ''; + }; + + allowedUnfree = lib.mkOption { + type = lib.types.listOf lib.types.string; + default = []; + description = '' + Allows for unfree packages by their name. + ''; + }; + }; + + config = lib.mkMerge [ + (lib.mkIf (config.nix.experimentalFeatures != "") {nix.extraOptions = "experimental-features = ${config.nix.experimentalFeatures}";}) + (lib.mkIf (allowed != []) {nixpkgs.config.allowUnfreePredicate = pkg: __elem (lib.getName pkg) allowed;}) + {nix.settings.auto-optimise-store = lib.mkDefault true;} + { + nix.gc.automatic = lib.mkDefault true; + nix.gc.options = lib.mkDefault "--delete-older-than 10d"; + } + ]; +} diff --git a/nixos/modules/packet-iscsi.nix b/nixos/modules/packet-iscsi.nix deleted file mode 100644 index ed7c881d..00000000 --- a/nixos/modules/packet-iscsi.nix +++ /dev/null @@ -1,92 +0,0 @@ -{ pkgs, config, lib, ... }: -let - packet-block-storage = - pkgs.stdenv.mkDerivation { - name = "packet-block-storage"; - src = pkgs.fetchFromGitHub { - owner = "packethost"; - repo = "packet-block-storage"; - rev = "4be27cbca7a924b4de7af059d5ac30c2aa5c9e6f"; - sha256 = "0h4lpvz7v6xhl14kkwrjp202lbagj6wp2wqgrqdc6cfb4h0mf9fq"; - }; - nativeBuildInputs = [ pkgs.makeWrapper ]; - installPhase = - let - deps = with pkgs; [ - which - jq - curl - gawk - kmod - openiscsi - multipath-tools - ]; - wrapIt = prog: '' - cp ${prog} $out/bin - chmod ugo+rx $out/bin/${prog} - substituteInPlace $out/bin/${prog} --replace /lib/udev/scsi_id ${pkgs.udev}/lib/udev/scsi_id - wrapProgram $out/bin/${prog} --prefix PATH : ${lib.makeBinPath deps} - ''; - in - '' - mkdir -p $out/bin - ${wrapIt "packet-block-storage-attach"} - ${wrapIt "packet-block-storage-detach"} - ''; - }; - -in -{ - environment.systemPackages = [ packet-block-storage pkgs.multipath-tools pkgs.openiscsi ]; - - systemd.sockets.multipathd = { - description = "multipathd control socket"; - before = [ "sockets.target" ]; - - listenStreams = [ "@/org/kernel/linux/storage/multipathd" ]; - }; - - systemd.services.multipathd = { - description = "Device-Mapper Multipath Device Controller"; - before = [ - "iscsi.service" - "iscsid.service" - ]; - after = [ "multipathd.socket" "systemd-udevd.service" ]; - unitConfig = { - DefaultDependencies = false; - }; - wants = [ "multipathd.socket" "blk-availability.service" ]; - conflicts = [ "shutdown.target" ]; - serviceConfig = { - Type = "notify"; - NotifyAccess = "main"; - LimitCORE = "infinity"; - ExecStartPre = "${pkgs.kmod}/bin/modprobe -a dm-multipath"; - ExecStart = "${pkgs.multipath-tools}/bin/multipathd -d -s"; - ExecReload = "${pkgs.multipath-tools}/bin/multipathd reconfigure"; - }; - }; - - systemd.targets.iscsi = { - description = "iSCSI mounts"; - wants = [ "iscsid.service" "attach-block-storage.service" ]; - wantedBy = [ "remote-fs.target" ]; - }; - - systemd.services.iscsid = { - description = "iSCSI daemon"; - path = [ pkgs.openiscsi ]; - script = "iscsid -f"; - }; - - systemd.services.attach-block-storage = { - description = "Attach Packet.net block storage"; - requires = [ "network-online.target" "iscsid.service" "multipathd.service" ]; - after = [ "network-online.target" "iscsid.service" "multipathd.service" ]; - before = [ ]; - script = '' - ${packet-block-storage}/bin/packet-block-storage-attach - ''; - }; -} diff --git a/nixos/modules/unset-is-macho.patch b/nixos/modules/unset-is-macho.patch new file mode 100644 index 00000000..75ca9feb --- /dev/null +++ b/nixos/modules/unset-is-macho.patch @@ -0,0 +1,13 @@ +diff --git a/src/nix/get-env.sh b/src/nix/get-env.sh +index 42c806450..a8563c772 100644 +--- a/src/nix/get-env.sh ++++ b/src/nix/get-env.sh +@@ -8,6 +8,8 @@ if [[ -n $stdenv ]]; then + source $stdenv/setup + fi + ++unset -f isMachO ++ + # Better to use compgen, but stdenv bash doesn't have it. + __vars="$(declare -p)" + __functions="$(declare -F)" \ No newline at end of file diff --git a/nixos/modules/version.nix b/nixos/modules/version.nix deleted file mode 100644 index caa26d4c..00000000 --- a/nixos/modules/version.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ self, ... }: -{ - system.configurationRevision = self.rev or "dirty"; -} diff --git a/nixos/modules/virtualbox-demo.nix b/nixos/modules/virtualbox-demo.nix deleted file mode 100644 index 618311ce..00000000 --- a/nixos/modules/virtualbox-demo.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ modulesPath, ... }: - -{ - imports = [ (modulesPath + "/installer/virtualbox-demo.nix") ]; -} diff --git a/nixos/modules/zerotier.nix b/nixos/modules/zerotier.nix new file mode 100644 index 00000000..0573e40f --- /dev/null +++ b/nixos/modules/zerotier.nix @@ -0,0 +1,4 @@ +_: { + services.zerotierone.enable = true; + services.zerotierone.joinNetworks = ["8286ac0e4768c8ae"]; +} diff --git a/packages/advcp/default.nix b/packages/advcp/default.nix new file mode 100644 index 00000000..40e24e83 --- /dev/null +++ b/packages/advcp/default.nix @@ -0,0 +1,30 @@ +{ + stdenv, + fetchurl, + fetchpatch, + ... +}: let + upstream = "coreutils"; +in + stdenv.mkDerivation rec { + name = "advcp"; + version = "8.30"; + + src = fetchurl { + name = "source-${name}-${version}.tar.xz"; + url = "ftp://ftp.gnu.org/gnu/${upstream}/${upstream}-${version}.tar.xz"; + sha256 = "0mxhw43d4wpqmvg0l4znk1vm10fy92biyh90lzdnqjcic2lb6cg8"; + }; + + patches = [ + (fetchpatch { + url = "https://github.com/mrdrogdrog/advcpmv/raw/496bcc9f1e8a13768066c353c238a475ccb91329/advcpmv-0.8-8.30.patch"; + sha256 = "0mw0ramg4ydqdqs33kw9m0rjvw5fvfa0scsq753pn7biwx6gx9hx"; + }) + ]; + + installPhase = '' + install -D src/cp $out/bin/advcp + install -D src/mv $out/bin/advmv + ''; + } diff --git a/packages/default.nix b/packages/default.nix new file mode 100644 index 00000000..a9f6c9bb --- /dev/null +++ b/packages/default.nix @@ -0,0 +1,27 @@ +{ + self, + emacs, + ... +} @ inputs: let + pkgs = inputs.nixpkgs-2105.legacyPackages.x86_64-linux; + upkgs = inputs.unstable.legacyPackages.x86_64-linux; + mpkgs = inputs.master.legacyPackages.x86_64-linux; + + epkgs = import inputs.unstable { + system = "x86_64-linux"; + overlays = [emacs.overlay]; + }; + nodePkgs = upkgs.callPackages ./nodePackages/override.nix {}; +in { + "advcp" = pkgs.callPackage ./advcp {}; + "gnucash-de" = upkgs.callPackage ./gnucash-de {}; + "keyleds" = upkgs.callPackage ./keyleds {}; + "dracula/konsole" = upkgs.callPackage ./dracula/konsole {}; + "emacs" = epkgs.emacsGcc; + "emacsPgtkGcc" = epkgs.emacsPgtkGcc; + "elixir-lsp" = upkgs.beam.packages.erlang.callPackage ./elixir-lsp {}; + "erlang-ls" = upkgs.beam.packages.erlang.callPackage ./erlang-ls {}; + "rofi/unicode" = upkgs.callPackage ./rofi-unicode {}; + "zx" = upkgs.nodePackages.zx; + "angular" = nodePkgs."@angular/cli"; +} diff --git a/packages/devShell.nix b/packages/devShell.nix deleted file mode 100644 index ec1215e9..00000000 --- a/packages/devShell.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ mkShell, nixpkgs-fmt, git }: - -mkShell { - name = "system-and-home-builder"; - - buildInputs = [ nixpkgs-fmt git ]; - - shellHook = '' - ${git}/bin/git fetch origin - ''; -} diff --git a/home/packages/dracula/konsole.nix b/packages/dracula/konsole/default.nix similarity index 83% rename from home/packages/dracula/konsole.nix rename to packages/dracula/konsole/default.nix index 06e89498..a709e3c7 100644 --- a/home/packages/dracula/konsole.nix +++ b/packages/dracula/konsole/default.nix @@ -1,5 +1,7 @@ -{ stdenv, fetchFromGitHub }: - +{ + stdenv, + fetchFromGitHub, +}: stdenv.mkDerivation rec { pname = "dracula-konsole-theme"; version = "fa85573"; @@ -12,7 +14,7 @@ stdenv.mkDerivation rec { sha256 = "sha256-375TOAOEx9FObS9F2tMYEyKboTYCZycawGoNEolZ0Ns="; }; - phases = [ "unpackPhase" "installPhase" ]; + phases = ["unpackPhase" "installPhase"]; installPhase = '' mkdir -p $out/share/konsole diff --git a/packages/elixir-lsp/default.nix b/packages/elixir-lsp/default.nix new file mode 100644 index 00000000..0211195e --- /dev/null +++ b/packages/elixir-lsp/default.nix @@ -0,0 +1,64 @@ +{ + stdenv, + erlang, + elixir, + rebar3, + hex, + callPackage, + git, + cacert, + fetchFromGitHub, +}: let + fetchMixDeps = callPackage ./fetch-mix-deps.nix {inherit rebar3;}; + + source = builtins.fromJSON (builtins.readFile ./source.json); +in + stdenv.mkDerivation rec { + name = "elixir-ls"; + version = "${source.version}-${erlang.version}-${elixir.version}"; + + nativeBuildInputs = [elixir hex git deps cacert]; + + deps = fetchMixDeps { + name = "${name}-${version}"; + inherit src; + sha256 = "sha256-8MOV2a/C5uO5Q1S97XY8VP0bJI4ByFRIIHNwRtG94cs="; + }; + + src = fetchFromGitHub rec { + name = "source-${owner}-${repo}-${version}"; + inherit (source) owner repo rev sha256; + }; + + dontStrip = true; + + configurePhase = '' + export MIX_ENV=prod + export HEX_OFFLINE=1 + export HEX_HOME="$PWD/hex" + export MIX_HOME="$PWD" + export MIX_REBAR3="${rebar3}/bin/rebar3" + export REBAR_GLOBAL_CONFIG_DIR="$PWD/rebar3" + export REBAR_CACHE_DIR="$PWD/rebar3.cache" + cp --no-preserve=all -R ${deps} deps + mix deps.compile --no-deps-check + ''; + + buildPhase = '' + mix do compile --no-deps-check, elixir_ls.release + ''; + + installPhase = '' + mkdir -p $out/bin + cp -Rv release $out/lib + # Prepare the wrapper script + substitute release/language_server.sh $out/bin/elixir-ls \ + --replace 'exec "''${dir}/launch.sh"' "exec $out/lib/launch.sh" + chmod +x $out/bin/elixir-ls + # prepare the launcher + substituteInPlace $out/lib/launch.sh \ + --replace "elixir" "${elixir}/bin/elixir" \ + --replace "ERL_LIBS=\"\$SCRIPTPATH:\$ERL_LIBS\"" \ + "ERL_LIBS=$out/lib:\$ERL_LIBS" + ''; + } diff --git a/home/packages/elixir-lsp/fetch-mix-deps.nix b/packages/elixir-lsp/fetch-mix-deps.nix similarity index 72% rename from home/packages/elixir-lsp/fetch-mix-deps.nix rename to packages/elixir-lsp/fetch-mix-deps.nix index ef7b6877..ed8b647b 100644 --- a/home/packages/elixir-lsp/fetch-mix-deps.nix +++ b/packages/elixir-lsp/fetch-mix-deps.nix @@ -1,11 +1,27 @@ -{ stdenvNoCC, lib, elixir, rebar, rebar3, git, cacert }: - -{ name ? null, src, sha256 ? null, env ? "prod" }: - +{ + stdenvNoCC, + lib, + elixir, + rebar, + rebar3, + git, + cacert, +}: { + name ? null, + src, + sha256 ? null, + env ? "prod", +}: stdenvNoCC.mkDerivation { - name = "mix-deps" + (if name != null then "-${name}" else ""); - - nativeBuildInputs = [ elixir git cacert ]; + name = + "mix-deps" + + ( + if name != null + then "-${name}" + else "" + ); + + nativeBuildInputs = [elixir git cacert]; inherit src; diff --git a/packages/elixir-lsp/source.json b/packages/elixir-lsp/source.json new file mode 100644 index 00000000..b5fca972 --- /dev/null +++ b/packages/elixir-lsp/source.json @@ -0,0 +1,8 @@ +{ + "fetchSubmodules": true, + "owner": "elixir-lsp", + "repo": "elixir-ls", + "rev": "v0.8.1", + "sha256": "sha256-KlZq12RCor9GrwA8QMP3R+jUQ/xFHRjkLwwkvthiMU0=", + "version": "0.8.1" +} diff --git a/packages/erlang-ls/default.nix b/packages/erlang-ls/default.nix new file mode 100644 index 00000000..a383b3d6 --- /dev/null +++ b/packages/erlang-ls/default.nix @@ -0,0 +1,70 @@ +{ + stdenv, + erlang, + rebar3, + lib, + rebar3Relx, + fetchFromGitHub, + git, + cacert, +}: let + source = builtins.fromJSON (builtins.readFile ./source.json); + + fetchRebar3Deps = { + name, + version, + sha256, + src, + meta ? {}, + }: + stdenv.mkDerivation { + name = "rebar-deps-${name}-${version}"; + + buildInputs = [git cacert]; + + phases = ["downloadPhase" "installPhase"]; + + downloadPhase = '' + cp ${src} . + HOME='.' DEBUG=1 ${rebar3}/bin/rebar3 get-deps + ''; + + installPhase = '' + mkdir -p "$out/_checkouts" + for i in ./_build/default/lib/* ; do + echo "$i" + rm -rf "$i"/.git + cp -R "$i" "$out/_checkouts" + done + ''; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = sha256; + + # impureEnvVars = lib.fetchers.proxyImpureEnvVars; + inherit meta; + }; +in + rebar3Relx rec { + pname = "erlang-ls"; + version = "${source.version}-${erlang.version}"; + releaseType = "escript"; + + checkouts = fetchRebar3Deps { + inherit version; + name = pname; + src = "${src}/rebar.lock"; + sha256 = "sha256-nm3e5DfehSCjjTPADSzohilOBFW4QiXnokwVNrpDZ1E="; + }; + + postPatch = '' + substituteInPlace apps/els_lsp/src/els_lsp.app.src \ + --replace '{vsn, git}' '{vsn, "${version}"}' + ''; + + src = fetchFromGitHub { + name = "source-${pname}-${version}"; + inherit (source) owner repo rev sha256; + }; + } diff --git a/packages/erlang-ls/source.json b/packages/erlang-ls/source.json new file mode 100644 index 00000000..c18a943f --- /dev/null +++ b/packages/erlang-ls/source.json @@ -0,0 +1,8 @@ +{ + "version": "0.20.0", + "owner": "erlang-ls", + "repo": "erlang_ls", + "rev": "0.20.0", + "sha256": "sha256-XBCauvPalIPjVOYlMfWC+5mKku28b/qqKhp9NgSkoyA=", + "fetchSubmodules": true +} diff --git a/home/packages/gnucash-de/default.nix b/packages/gnucash-de/default.nix similarity index 76% rename from home/packages/gnucash-de/default.nix rename to packages/gnucash-de/default.nix index 659d9f1b..155bccd9 100644 --- a/home/packages/gnucash-de/default.nix +++ b/packages/gnucash-de/default.nix @@ -1,8 +1,11 @@ -{ runCommand, makeWrapper, gnucash }: - +{ + runCommand, + makeWrapper, + gnucash, +}: runCommand "gnucash-de-${gnucash.version}" { - nativeBuildInputs = [ makeWrapper ]; + nativeBuildInputs = [makeWrapper]; } '' mkdir -p $out/{bin,share/applications} makeWrapper ${gnucash}/bin/gnucash $out/bin/gnucash \ diff --git a/home/packages/keyleds/default.nix b/packages/keyleds/default.nix similarity index 60% rename from home/packages/keyleds/default.nix rename to packages/keyleds/default.nix index 13128ef8..ac42e45e 100644 --- a/home/packages/keyleds/default.nix +++ b/packages/keyleds/default.nix @@ -1,5 +1,9 @@ -{ pkgs, stdenv, fetchFromGitHub, ... }: - +{ + pkgs, + stdenv, + fetchFromGitHub, + ... +}: stdenv.mkDerivation rec { name = "keyleds"; version = "1.1.1"; @@ -12,6 +16,6 @@ stdenv.mkDerivation rec { sha256 = "sha256-KCWmaRmJTmZgTt7HW9o6Jt1u4x6+G2j6T9EqVt21U18="; }; - nativeBuildInputs = with pkgs; [ cmake pkgconfig ]; - buildInputs = with pkgs; [ x11 xorg.libXi libuv systemd luajit libyaml ]; + nativeBuildInputs = with pkgs; [cmake pkgconfig]; + buildInputs = with pkgs; [xlibsWrapper xorg.libXi libuv systemd luajit libyaml]; } diff --git a/packages/nodePackages/default.nix b/packages/nodePackages/default.nix new file mode 100644 index 00000000..d79cb6fe --- /dev/null +++ b/packages/nodePackages/default.nix @@ -0,0 +1,22 @@ +# This file has been generated by node2nix 1.9.0. Do not edit! +{ + pkgs ? + import { + inherit system; + }, + system ? builtins.currentSystem, + nodejs ? pkgs."nodejs-12_x", +}: let + nodeEnv = import ./node-env.nix { + inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript; + inherit pkgs nodejs; + libtool = + if pkgs.stdenv.isDarwin + then pkgs.darwin.cctools + else null; + }; +in + import ./node-packages.nix { + inherit (pkgs) fetchurl nix-gitignore stdenv lib fetchgit; + inherit nodeEnv; + } diff --git a/packages/nodePackages/node-env.nix b/packages/nodePackages/node-env.nix new file mode 100644 index 00000000..cbcab478 --- /dev/null +++ b/packages/nodePackages/node-env.nix @@ -0,0 +1,629 @@ +# This file originates from node2nix +{ + lib, + stdenv, + nodejs, + python2, + pkgs, + libtool, + runCommand, + writeTextFile, + writeShellScript, +}: let + # Workaround to cope with utillinux in Nixpkgs 20.09 and util-linux in Nixpkgs master + utillinux = + if pkgs ? utillinux + then pkgs.utillinux + else pkgs.util-linux; + + python = + if nodejs ? python + then nodejs.python + else python2; + + # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise + tarWrapper = runCommand "tarWrapper" {} '' + mkdir -p $out/bin + + cat > $out/bin/tar <> $out/nix-support/hydra-build-products + ''; + }; + + # Common shell logic + installPackage = writeShellScript "install-package" '' + installPackage() { + local packageName=$1 src=$2 + + local strippedName + + local DIR=$PWD + cd $TMPDIR + + unpackFile $src + + # Make the base dir in which the target dependency resides first + mkdir -p "$(dirname "$DIR/$packageName")" + + if [ -f "$src" ] + then + # Figure out what directory has been unpacked + packageDir="$(find . -maxdepth 1 -type d | tail -1)" + + # Restore write permissions to make building work + find "$packageDir" -type d -exec chmod u+x {} \; + chmod -R u+w "$packageDir" + + # Move the extracted tarball into the output folder + mv "$packageDir" "$DIR/$packageName" + elif [ -d "$src" ] + then + # Get a stripped name (without hash) of the source directory. + # On old nixpkgs it's already set internally. + if [ -z "$strippedName" ] + then + strippedName="$(stripHash $src)" + fi + + # Restore write permissions to make building work + chmod -R u+w "$strippedName" + + # Move the extracted directory into the output folder + mv "$strippedName" "$DIR/$packageName" + fi + + # Change to the package directory to install dependencies + cd "$DIR/$packageName" + } + ''; + + # Bundle the dependencies of the package + # + # Only include dependencies if they don't exist. They may also be bundled in the package. + includeDependencies = {dependencies}: + lib.optionalString (dependencies != []) ( + '' + mkdir -p node_modules + cd node_modules + '' + + (lib.concatMapStrings ( + dependency: '' + if [ ! -e "${dependency.name}" ]; then + ${composePackage dependency} + fi + '' + ) + dependencies) + + '' + cd .. + '' + ); + + # Recursively composes the dependencies of a package + composePackage = { + name, + packageName, + src, + dependencies ? [], + ... + } @ args: + builtins.addErrorContext "while evaluating node package '${packageName}'" '' + installPackage "${packageName}" "${src}" + ${includeDependencies {inherit dependencies;}} + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + ''; + + pinpointDependencies = { + dependencies, + production, + }: let + pinpointDependenciesFromPackageJSON = writeTextFile { + name = "pinpointDependencies.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + function resolveDependencyVersion(location, name) { + if(location == process.env['NIX_STORE']) { + return null; + } else { + var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json"); + + if(fs.existsSync(dependencyPackageJSON)) { + var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON)); + + if(dependencyPackageObj.name == name) { + return dependencyPackageObj.version; + } + } else { + return resolveDependencyVersion(path.resolve(location, ".."), name); + } + } + } + + function replaceDependencies(dependencies) { + if(typeof dependencies == "object" && dependencies !== null) { + for(var dependency in dependencies) { + var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency); + + if(resolvedVersion === null) { + process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n"); + } else { + dependencies[dependency] = resolvedVersion; + } + } + } + } + + /* Read the package.json configuration */ + var packageObj = JSON.parse(fs.readFileSync('./package.json')); + + /* Pinpoint all dependencies */ + replaceDependencies(packageObj.dependencies); + if(process.argv[2] == "development") { + replaceDependencies(packageObj.devDependencies); + } + replaceDependencies(packageObj.optionalDependencies); + + /* Write the fixed package.json file */ + fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2)); + ''; + }; + in '' + node ${pinpointDependenciesFromPackageJSON} ${ + if production + then "production" + else "development" + } + + ${lib.optionalString (dependencies != []) + '' + if [ -d node_modules ] + then + cd node_modules + ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies} + cd .. + fi + ''} + ''; + + # Recursively traverses all dependencies of a package and pinpoints all + # dependencies in the package.json file to the versions that are actually + # being used. + + pinpointDependenciesOfPackage = { + packageName, + dependencies ? [], + production ? true, + ... + } @ args: '' + if [ -d "${packageName}" ] + then + cd "${packageName}" + ${pinpointDependencies {inherit dependencies production;}} + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + fi + ''; + + # Extract the Node.js source code which is used to compile packages with + # native bindings + nodeSources = runCommand "node-sources" {} '' + tar --no-same-owner --no-same-permissions -xf ${nodejs.src} + mv node-* $out + ''; + + # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty) + addIntegrityFieldsScript = writeTextFile { + name = "addintegrityfields.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + function augmentDependencies(baseDir, dependencies) { + for(var dependencyName in dependencies) { + var dependency = dependencies[dependencyName]; + + // Open package.json and augment metadata fields + var packageJSONDir = path.join(baseDir, "node_modules", dependencyName); + var packageJSONPath = path.join(packageJSONDir, "package.json"); + + if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored + console.log("Adding metadata fields to: "+packageJSONPath); + var packageObj = JSON.parse(fs.readFileSync(packageJSONPath)); + + if(dependency.integrity) { + packageObj["_integrity"] = dependency.integrity; + } else { + packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads. + } + + if(dependency.resolved) { + packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided + } else { + packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories. + } + + if(dependency.from !== undefined) { // Adopt from property if one has been provided + packageObj["_from"] = dependency.from; + } + + fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2)); + } + + // Augment transitive dependencies + if(dependency.dependencies !== undefined) { + augmentDependencies(packageJSONDir, dependency.dependencies); + } + } + } + + if(fs.existsSync("./package-lock.json")) { + var packageLock = JSON.parse(fs.readFileSync("./package-lock.json")); + + if(![1, 2].includes(packageLock.lockfileVersion)) { + process.stderr.write("Sorry, I only understand lock file versions 1 and 2!\n"); + process.exit(1); + } + + if(packageLock.dependencies !== undefined) { + augmentDependencies(".", packageLock.dependencies); + } + } + ''; + }; + + # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes + reconstructPackageLock = writeTextFile { + name = "addintegrityfields.js"; + text = '' + var fs = require('fs'); + var path = require('path'); + + var packageObj = JSON.parse(fs.readFileSync("package.json")); + + var lockObj = { + name: packageObj.name, + version: packageObj.version, + lockfileVersion: 1, + requires: true, + dependencies: {} + }; + + function augmentPackageJSON(filePath, dependencies) { + var packageJSON = path.join(filePath, "package.json"); + if(fs.existsSync(packageJSON)) { + var packageObj = JSON.parse(fs.readFileSync(packageJSON)); + dependencies[packageObj.name] = { + version: packageObj.version, + integrity: "sha1-000000000000000000000000000=", + dependencies: {} + }; + processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies); + } + } + + function processDependencies(dir, dependencies) { + if(fs.existsSync(dir)) { + var files = fs.readdirSync(dir); + + files.forEach(function(entry) { + var filePath = path.join(dir, entry); + var stats = fs.statSync(filePath); + + if(stats.isDirectory()) { + if(entry.substr(0, 1) == "@") { + // When we encounter a namespace folder, augment all packages belonging to the scope + var pkgFiles = fs.readdirSync(filePath); + + pkgFiles.forEach(function(entry) { + if(stats.isDirectory()) { + var pkgFilePath = path.join(filePath, entry); + augmentPackageJSON(pkgFilePath, dependencies); + } + }); + } else { + augmentPackageJSON(filePath, dependencies); + } + } + }); + } + } + + processDependencies("node_modules", lockObj.dependencies); + + fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2)); + ''; + }; + + prepareAndInvokeNPM = { + packageName, + bypassCache, + reconstructLock, + npmFlags, + production, + }: let + forceOfflineFlag = + if bypassCache + then "--offline" + else "--registry http://www.example.com"; + in '' + # Pinpoint the versions of all dependencies to the ones that are actually being used + echo "pinpointing versions of dependencies..." + source $pinpointDependenciesScriptPath + + # Patch the shebangs of the bundled modules to prevent them from + # calling executables outside the Nix store as much as possible + patchShebangs . + + # Deploy the Node.js package by running npm install. Since the + # dependencies have been provided already by ourselves, it should not + # attempt to install them again, which is good, because we want to make + # it Nix's responsibility. If it needs to install any dependencies + # anyway (e.g. because the dependency parameters are + # incomplete/incorrect), it fails. + # + # The other responsibilities of NPM are kept -- version checks, build + # steps, postprocessing etc. + + export HOME=$TMPDIR + cd "${packageName}" + runHook preRebuild + + ${lib.optionalString bypassCache '' + ${lib.optionalString reconstructLock '' + if [ -f package-lock.json ] + then + echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!" + echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!" + rm package-lock.json + else + echo "No package-lock.json file found, reconstructing..." + fi + + node ${reconstructPackageLock} + ''} + + node ${addIntegrityFieldsScript} + ''} + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild + + if [ "''${dontNpmInstall-}" != "1" ] + then + # NPM tries to download packages even when they already exist if npm-shrinkwrap is used. + rm -f npm-shrinkwrap.json + + npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install + fi + ''; + + # Builds and composes an NPM package including all its dependencies + buildNodePackage = { + name, + packageName, + version, + dependencies ? [], + buildInputs ? [], + production ? true, + npmFlags ? "", + dontNpmInstall ? false, + bypassCache ? false, + reconstructLock ? false, + preRebuild ? "", + dontStrip ? true, + unpackPhase ? "true", + buildPhase ? "true", + meta ? {}, + ... + } @ args: let + extraArgs = removeAttrs args ["name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" "meta"]; + in + stdenv.mkDerivation ({ + name = "${name}-${version}"; + buildInputs = + [tarWrapper python nodejs] + ++ lib.optional (stdenv.isLinux) utillinux + ++ lib.optional (stdenv.isDarwin) libtool + ++ buildInputs; + + inherit nodejs; + + inherit dontStrip; # Stripping may fail a build for some package deployments + inherit dontNpmInstall preRebuild unpackPhase buildPhase; + + compositionScript = composePackage args; + pinpointDependenciesScript = pinpointDependenciesOfPackage args; + + passAsFile = ["compositionScript" "pinpointDependenciesScript"]; + + installPhase = '' + source ${installPackage} + + # Create and enter a root node_modules/ folder + mkdir -p $out/lib/node_modules + cd $out/lib/node_modules + + # Compose the package and all its dependencies + source $compositionScriptPath + + ${prepareAndInvokeNPM {inherit packageName bypassCache reconstructLock npmFlags production;}} + + # Create symlink to the deployed executable folder, if applicable + if [ -d "$out/lib/node_modules/.bin" ] + then + ln -s $out/lib/node_modules/.bin $out/bin + fi + + # Create symlinks to the deployed manual page folders, if applicable + if [ -d "$out/lib/node_modules/${packageName}/man" ] + then + mkdir -p $out/share + for dir in "$out/lib/node_modules/${packageName}/man/"* + do + mkdir -p $out/share/man/$(basename "$dir") + for page in "$dir"/* + do + ln -s $page $out/share/man/$(basename "$dir") + done + done + fi + + # Run post install hook, if provided + runHook postInstall + ''; + + meta = + { + # default to Node.js' platforms + platforms = nodejs.meta.platforms; + } + // meta; + } + // extraArgs); + + # Builds a node environment (a node_modules folder and a set of binaries) + buildNodeDependencies = { + name, + packageName, + version, + src, + dependencies ? [], + buildInputs ? [], + production ? true, + npmFlags ? "", + dontNpmInstall ? false, + bypassCache ? false, + reconstructLock ? false, + dontStrip ? true, + unpackPhase ? "true", + buildPhase ? "true", + ... + } @ args: let + extraArgs = removeAttrs args ["name" "dependencies" "buildInputs"]; + in + stdenv.mkDerivation ({ + name = "node-dependencies-${name}-${version}"; + + buildInputs = + [tarWrapper python nodejs] + ++ lib.optional (stdenv.isLinux) utillinux + ++ lib.optional (stdenv.isDarwin) libtool + ++ buildInputs; + + inherit dontStrip; # Stripping may fail a build for some package deployments + inherit dontNpmInstall unpackPhase buildPhase; + + includeScript = includeDependencies {inherit dependencies;}; + pinpointDependenciesScript = pinpointDependenciesOfPackage args; + + passAsFile = ["includeScript" "pinpointDependenciesScript"]; + + installPhase = '' + source ${installPackage} + + mkdir -p $out/${packageName} + cd $out/${packageName} + + source $includeScriptPath + + # Create fake package.json to make the npm commands work properly + cp ${src}/package.json . + chmod 644 package.json + ${lib.optionalString bypassCache '' + if [ -f ${src}/package-lock.json ] + then + cp ${src}/package-lock.json . + fi + ''} + + # Go to the parent folder to make sure that all packages are pinpointed + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + + ${prepareAndInvokeNPM {inherit packageName bypassCache reconstructLock npmFlags production;}} + + # Expose the executables that were installed + cd .. + ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."} + + mv ${packageName} lib + ln -s $out/lib/node_modules/.bin $out/bin + ''; + } + // extraArgs); + + # Builds a development shell + buildNodeShell = { + name, + packageName, + version, + src, + dependencies ? [], + buildInputs ? [], + production ? true, + npmFlags ? "", + dontNpmInstall ? false, + bypassCache ? false, + reconstructLock ? false, + dontStrip ? true, + unpackPhase ? "true", + buildPhase ? "true", + ... + } @ args: let + nodeDependencies = buildNodeDependencies args; + in + stdenv.mkDerivation { + name = "node-shell-${name}-${version}"; + + buildInputs = [python nodejs] ++ lib.optional (stdenv.isLinux) utillinux ++ buildInputs; + buildCommand = '' + mkdir -p $out/bin + cat > $out/bin/shell < 0 )); do - i=$1; shift 1 - - case "$i" in - --targetHost) - targetHost=$1; shift 1 - ;; - - --name) - name=$1; shift 1 - ;; - esac - done - - if [ -z "$name" ]; then - if [ -z "$targetHost" ]; then - name=$(${nettools}/bin/hostname) - else - printf "--name needs to be specified" - exit 1 - fi - fi - outLink=$(mktemp -d)/result-$name - - # nixos-rebuild build -L \ - # --out-link "$outLink" \ - # .#$name - - if [ -z "$targetHost" ]; then - echo "Will activate, please enter your password to elevate" - sudo nixos-rebuild switch -L --flake .#$name - else - storePath=$(readlink "$outLink") - nix copy --to "ssh://root@$targetHost" "$storePath" - ssh "root@$targetHost" "$storePath/bin/switch-to-configuration" switch - fi -''