From 2463b3275b1dfb89137bd39ace6c6defa7a28e30 Mon Sep 17 00:00:00 2001 From: Patrick Stevens Date: Sun, 6 Feb 2022 14:40:14 +0000 Subject: [PATCH] Use flakes (#6) --- .gitignore | 2 +- darwin-configuration.nix | 14 +--- flake.lock | 86 ++++++++++++++++++++++++ flake.nix | 46 +++++++++++++ home.nix | 138 +++++++++++++++++++++------------------ overlays.nix | 4 -- python.nix | 2 +- vscode-extensions.nix | 90 ++++++++++++------------- 8 files changed, 250 insertions(+), 132 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.gitignore b/.gitignore index 283f75f..53e6902 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -result/ +result .idea/ bin/ obj/ diff --git a/darwin-configuration.nix b/darwin-configuration.nix index f7281a6..7918222 100644 --- a/darwin-configuration.nix +++ b/darwin-configuration.nix @@ -1,16 +1,10 @@ -{ config, lib, pkgs, ... }: +{ pkgs, ... }: let python = import ./python.nix { inherit pkgs; }; in { - nix.useDaemon = true; - imports = [ ]; - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.Patrick = import ./home.nix; - # List packages installed in system profile. To search by name, run: # $ nix-env -qaP | grep wget @@ -31,12 +25,6 @@ let python = import ./python.nix { inherit pkgs; }; in # $ darwin-rebuild switch -I darwin-config=$HOME/.config/nixpkgs/darwin/configuration.nix environment.darwinConfig = "$HOME/.nixpkgs/darwin-configuration.nix"; - nixpkgs.overlays = import ./overlays.nix; - - nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ - "vscode" - ]; - # Auto upgrade nix package and the daemon service. services.nix-daemon.enable = true; nix.package = pkgs.nixFlakes; diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..7147618 --- /dev/null +++ b/flake.lock @@ -0,0 +1,86 @@ +{ + "nodes": { + "darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1642495030, + "narHash": "sha256-u1ZlFbLWzkM6zOfuZ1tr0tzTuDWucOYwALPWDWLorkE=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "bcdb6022b3a300abf59cb5d0106c158940f5120e", + "type": "github" + }, + "original": { + "owner": "lnl7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "emacs": { + "locked": { + "lastModified": 1644143491, + "narHash": "sha256-ld5MzYesjOE8Ml5uvjFUFaxAozJEl48svwWQ3i7oggc=", + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "4c7e0980a5f23684ca3ea772d4f62b0da4f55e3c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "emacs-overlay", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1643933104, + "narHash": "sha256-NZPuFxRsZKN8pjRuHPpzlMyt6JQhcjiduBG8bMghSjE=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "63dccc4e60422c1db2c3929b2fd1541f36b7e664", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1643653624, + "narHash": "sha256-+8hLMsQrZ2rkvcEtEId6HMe8GPxVb5ga+Vh1fdsqJDU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "a529f0c125a78343b145a8eb2b915b0295e4f459", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "darwin": "darwin", + "emacs": "emacs", + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..61046d0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,46 @@ +{ + description = "Patrick's Darwin Nix setup"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + darwin = { + url = "github:lnl7/nix-darwin/master"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + emacs = { + url = "github:nix-community/emacs-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, darwin, emacs, nixpkgs, home-manager, ... }@inputs: + let system = "aarch64-darwin"; in + let config = { + allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [ + "vscode" + ]; + }; in + let overlays = [ emacs.overlay ] ++ import ./overlays.nix; in + let pkgs = (import nixpkgs { inherit system config overlays; }); in + { + darwinConfigurations = { + nixpkgs = pkgs; + patrick = darwin.lib.darwinSystem { + system = system; + modules = [ + ./darwin-configuration.nix + home-manager.darwinModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.Patrick = import ./home.nix { nixpkgs = pkgs; }; + } + ]; + }; + }; + }; +} diff --git a/home.nix b/home.nix index 680e296..3d14646 100644 --- a/home.nix +++ b/home.nix @@ -1,7 +1,7 @@ -{ config, pkgs, ... }: +{ nixpkgs, ... }: let username = "Patrick"; in -let dotnet = pkgs.dotnet-sdk_6; in +let dotnet = nixpkgs.dotnet-sdk_6; in { imports = [ ./rider ]; @@ -23,61 +23,64 @@ let dotnet = pkgs.dotnet-sdk_6; in # You can update Home Manager without changing this value. See # the Home Manager release notes for a list of state version # changes in each release. - home.stateVersion = "21.11"; + home.stateVersion = "22.05"; home.packages = [ - pkgs.rust-analyzer - pkgs.tmux - pkgs.wget - pkgs.youtube-dl - pkgs.cmake - pkgs.gnumake - pkgs.gcc - pkgs.gdb - pkgs.hledger - pkgs.hledger-web + nixpkgs.rust-analyzer + nixpkgs.tmux + nixpkgs.wget + nixpkgs.youtube-dl + nixpkgs.cmake + nixpkgs.gnumake + nixpkgs.gcc + nixpkgs.gdb + nixpkgs.hledger + nixpkgs.hledger-web dotnet - pkgs.docker - pkgs.jitsi-meet - #pkgs.handbrake - pkgs.ripgrep - pkgs.elan - pkgs.coreutils-prefixed - pkgs.shellcheck - pkgs.html-tidy - pkgs.hugo - #pkgs.agda - pkgs.pijul - pkgs.universal-ctags - pkgs.asciinema - pkgs.git-lfs - pkgs.imagemagick + nixpkgs.docker + nixpkgs.jitsi-meet + #nixpkgs.handbrake + nixpkgs.ripgrep + nixpkgs.elan + nixpkgs.coreutils-prefixed + nixpkgs.shellcheck + nixpkgs.html-tidy + nixpkgs.hugo + #nixpkgs.agda + nixpkgs.pijul + nixpkgs.universal-ctags + nixpkgs.asciinema + nixpkgs.git-lfs + nixpkgs.imagemagick + nixpkgs.nixpkgs-fmt + nixpkgs.rnix-lsp ]; programs.vscode = { - enable = true; - package = pkgs.vscode; - extensions = import ./vscode-extensions.nix { inherit pkgs; }; - userSettings = { - workbench.colorTheme = "Default High Contrast"; - "files.Exclude" = { - "**/.git" = true; - "**/.DS_Store" = true; - "**/Thumbs.db" = true; - "**/*.olean" = true; - }; - "git.path" = "${pkgs.git}/bin/git"; - "update.mode" = "none"; - "docker.dockerPath" = "${pkgs.docker}/bin/docker"; - #"lean.leanpkgPath" = "/Users/${username}/.elan/toolchains/stable/bin/leanpkg"; - "lean.executablePath" = "/Users/${username}/.elan/toolchains/lean4/bin/lean"; - "lean.memoryLimit" = 8092; + enable = true; + package = nixpkgs.vscode; + extensions = import ./vscode-extensions.nix { pkgs = nixpkgs; }; + userSettings = { + workbench.colorTheme = "Default High Contrast"; + "files.Exclude" = { + "**/.git" = true; + "**/.DS_Store" = true; + "**/Thumbs.db" = true; + "**/*.olean" = true; + "**/result" = true; }; + "git.path" = "${nixpkgs.git}/bin/git"; + "update.mode" = "none"; + "docker.dockerPath" = "${nixpkgs.docker}/bin/docker"; + #"lean.leanpkgPath" = "/Users/${username}/.elan/toolchains/stable/bin/leanpkg"; + "lean.executablePath" = "/Users/${username}/.elan/toolchains/lean4/bin/lean"; + "lean.memoryLimit" = 8092; + }; }; programs.tmux = { - shell = "\${pkgs.zsh}/bin/zsh"; + shell = "\${nixpkgs.zsh}/bin/zsh"; }; programs.zsh = { @@ -97,15 +100,15 @@ let dotnet = pkgs.dotnet-sdk_6; in EDITOR = "vim"; LC_ALL = "en_US.UTF-8"; LC_CTYPE = "en_US.UTF-8"; - RUSTFLAGS = "-L ${pkgs.libiconv}/lib"; + RUSTFLAGS = "-L ${nixpkgs.libiconv}/lib"; RUST_BACKTRACE = "full"; }; shellAliases = { vim = "nvim"; view = "vim -R"; nix-upgrade = "sudo -i sh -c 'nix-channel --update && nix-env -iA nixpkgs.nix && launchctl remove org.nixos.nix-daemon && launchctl load /Library/LaunchDaemons/org.nixos.nix-daemon.plist'"; - cmake = "cmake -DCMAKE_MAKE_PROGRAM=${pkgs.gnumake}/bin/make -DCMAKE_AR=${pkgs.darwin.cctools}/bin/ar -DCMAKE_RANLIB=${pkgs.darwin.cctools}/bin/ranlib -DGMP_INCLUDE_DIR=${pkgs.gmp.dev}/include/ -DGMP_LIBRARIES=${pkgs.gmp}/lib/libgmp.10.dylib"; - ar = "${pkgs.darwin.cctools}/bin/ar"; + cmake = "cmake -DCMAKE_MAKE_PROGRAM=${nixpkgs.gnumake}/bin/make -DCMAKE_AR=${nixpkgs.darwin.cctools}/bin/ar -DCMAKE_RANLIB=${nixpkgs.darwin.cctools}/bin/ranlib -DGMP_INCLUDE_DIR=${nixpkgs.gmp.dev}/include/ -DGMP_LIBRARIES=${nixpkgs.gmp}/lib/libgmp.10.dylib"; + ar = "${nixpkgs.darwin.cctools}/bin/ar"; }; }; @@ -115,7 +118,7 @@ let dotnet = pkgs.dotnet-sdk_6; in }; programs.git = { - package = pkgs.gitAndTools.gitFull; + package = nixpkgs.gitAndTools.gitFull; enable = true; userName = "Smaug123"; userEmail = "patrick+github@patrickstevens.co.uk"; @@ -140,10 +143,10 @@ let dotnet = pkgs.dotnet-sdk_6; in addIgnoredFile = false; }; "filter \"lfs\"" = { - clean = "${pkgs.git-lfs} clean -- %f"; - smudge = "${pkgs.git-lfs}/bin/git-lfs smudge --skip -- %f"; - process = "${pkgs.git-lfs}/bin/git-lfs filter-process"; - required = true; + clean = "${nixpkgs.git-lfs} clean -- %f"; + smudge = "${nixpkgs.git-lfs}/bin/git-lfs smudge --skip -- %f"; + process = "${nixpkgs.git-lfs}/bin/git-lfs filter-process"; + required = true; }; pull = { twohead = "ort"; @@ -152,17 +155,25 @@ let dotnet = pkgs.dotnet-sdk_6; in }; programs.neovim.enable = true; - programs.neovim.plugins = with pkgs.vimPlugins; [ + programs.neovim.plugins = with nixpkgs.vimPlugins; [ molokai tagbar - { plugin = rust-vim; - config = "let g:rustfmt_autosave = 1"; } - { plugin = syntastic; + { + plugin = rust-vim; + config = "let g:rustfmt_autosave = 1"; + } + { + plugin = LanguageClient-neovim; + config = "let g:LanguageClient_serverCommands = { 'nix': ['rnix-lsp'] }"; + } + { + plugin = syntastic; config = ''let g:syntastic_rust_checkers = ['cargo'] let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 -let g:syntastic_check_on_wq = 0''; } +let g:syntastic_check_on_wq = 0''; + } YouCompleteMe tagbar @@ -179,14 +190,13 @@ let g:syntastic_check_on_wq = 0''; } home.file.".ideavimrc".source = ./ideavimrc; home.file.".config/youtube-dl/config".source = ./youtube-dl.conf; - programs.emacs = { enable = true; - package = pkgs.emacsGcc; - extraPackages = (epkgs: []); + package = nixpkgs.emacsGcc; + extraPackages = (epkgs: [ ]); extraConfig = '' -(load-file (let ((coding-system-for-read 'utf-8)) - (shell-command-to-string "agda-mode locate"))) + (load-file (let ((coding-system-for-read 'utf-8)) + (shell-command-to-string "agda-mode locate"))) ''; }; } diff --git a/overlays.nix b/overlays.nix index 8bb48cf..1f45229 100644 --- a/overlays.nix +++ b/overlays.nix @@ -7,8 +7,4 @@ } ); }) - - (import (builtins.fetchTarball { - url = https://github.com/nix-community/emacs-overlay/archive/9516033899da467b8fcee6536a61ea66ebd0c4fa.tar.gz; - })) ] diff --git a/python.nix b/python.nix index 76b9a41..0781c98 100644 --- a/python.nix +++ b/python.nix @@ -9,7 +9,7 @@ in let packageOverrides = self: super: { # Test failures on darwin ("windows-1252"); just skip pytest # (required for elan) - beautifulsoup4 = super.beautifulsoup4.overridePythonAttrs(old: { pytestCheckPhase="true"; }); + beautifulsoup4 = super.beautifulsoup4.overridePythonAttrs (old: { pytestCheckPhase = "true"; }); }; in diff --git a/vscode-extensions.nix b/vscode-extensions.nix index d171260..780b02b 100644 --- a/vscode-extensions.nix +++ b/vscode-extensions.nix @@ -1,122 +1,114 @@ { pkgs }: with pkgs.vscode-extensions; [ - bbenoist.nix - haskell.haskell - yzhang.markdown-all-in-one - james-yu.latex-workshop - vscodevim.vim -# Doesn't work with vscodium, and unfree -# ms-vscode-remote.remote-ssh -# Not supported on Darwin, apparently -# ms-dotnettools.csharp + bbenoist.nix + haskell.haskell + yzhang.markdown-all-in-one + james-yu.latex-workshop + vscodevim.vim + # Not supported on Darwin, apparently + # ms-dotnettools.csharp ] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [ -{ + { name = "remote-containers"; publisher = "ms-vscode-remote"; version = "0.218.0"; sha256 = "4Li0sYfHOsJMn5FJtvDTGKoGPcRmoosD9tZ7q9H9DfQ="; -} -{ + } + { name = "remote-ssh"; publisher = "ms-vscode-remote"; version = "0.73.2022020215"; sha256 = "hTRfoUHKrIOSV8eZ/62ewaII5291huXjOZ++dRUmKoI="; -} -{ + } + { name = "vscode-docker"; publisher = "ms-azuretools"; version = "1.18.0"; sha256 = "UPUfTOc5xJhI5ACm2oyWqtZ4zNxZjy16D6Mf30eHFEI="; -} -{ + } + { name = "code-gnu-global"; publisher = "austin"; version = "0.2.2"; sha256 = "1fz89m6ja25aif6wszg9h2fh5vajk6bj3lp1mh0l2b04nw2mzhd5"; -} -{ + } + { name = "rust-analyzer"; publisher = "matklad"; version = "0.3.904"; sha256 = "t5CCUdFCiSYrMsBHG5eOfg3sXMacFWiR0hmVa7S1i8Y="; -} -{ + } + { name = "vscode-lldb"; publisher = "vadimcn"; version = "1.6.10"; sha256 = "CGVVs//jIZM8uX7Wc9gM4aQGwECi88eIpfPqU2hKbeA="; -} -{ + } + { name = "toml"; publisher = "be5invis"; version = "0.6.0"; sha256 = "yk7buEyQIw6aiUizAm+sgalWxUibIuP9crhyBaOjC2E="; -} -{ + } + { name = "Ionide-Paket"; publisher = "Ionide"; version = "2.0.0"; sha256 = "1455zx5p0d30b1agdi1zw22hj0d3zqqglw98ga8lj1l1d757gv6v"; -} -{ + } + { name = "lean"; publisher = "jroesch"; version = "0.16.44"; sha256 = "hjflz5JHVr1YWq6QI9DpdNPY1uL7lAuQTMAdwCtLEfY="; -} -{ + } + { name = "language-haskell"; publisher = "justusadam"; version = "3.4.0"; sha256 = "0ab7m5jzxakjxaiwmg0jcck53vnn183589bbxh3iiylkpicrv67y"; -} -{ + } + { name = "vscode-clang"; publisher = "mitaki28"; version = "0.2.4"; sha256 = "0sys2h4jvnannlk2q02lprc2ss9nkgh0f0kwa188i7viaprpnx23"; -} -{ + } + { name = "dotnet-interactive-vscode"; publisher = "ms-dotnettools"; version = "1.0.2606011"; sha256 = "a3u9NKsqHZKhZkKqJqo+LgJFTL2yhehBepTOFOXE+jY="; -} -{ + } + { name = "python"; publisher = "ms-python"; version = "2021.12.1559732655"; sha256 = "hXTVZ7gbu234zyAg0ZrZPUo6oULB98apxe79U2yQHD4="; -} -{ - name = "remote-containers"; - publisher = "ms-vscode-remote"; - version = "0.212.0"; - sha256 = "w7vQRwhqTXHnQDRVNUCMBdX/rP96IhL9ejn0uSTzyyw="; -} -{ + } + { name = "mono-debug"; publisher = "ms-vscode"; version = "0.16.2"; sha256 = "10hixqkw5r3cg52xkbky395lv72sb9d9wrngdvmrwx62hkbk5465"; -} -{ + } + { name = "Theme-MarkdownKit"; publisher = "ms-vscode"; version = "0.1.4"; sha256 = "1im78k2gaj6cri2jcvy727qdy25667v0f7vv3p3hv13apzxgzl0l"; -} -{ + } + { name = "trailing-spaces"; publisher = "shardulm94"; version = "0.3.1"; sha256 = "0h30zmg5rq7cv7kjdr5yzqkkc1bs20d72yz9rjqag32gwf46s8b8"; -} -{ + } + { name = "debug"; publisher = "webfreak"; version = "0.25.1"; sha256 = "1l01sv6kwh8dlv3kygkkd0z9m37hahflzd5bx1wwij5p61jg7np9"; -} + } ]